vc struct的成員對齊

2021-04-13 05:54:34 字數 1596 閱讀 2117

1.struct的成員對齊:#pragma pack (n) //n:1 2 4 8 16

1.1

自然對界

struct

是一種復合資料型別,其構成元素既可以是基本資料型別(如

int、

long

、float

等)的變數,也可以是一些復合資料型別(如

array

、struct

、union

等)的資料單元。對於結構體,編譯器會自動進行成員變數的對齊,以提高運算效率。預設情況下,編譯器為結構體的每個成員按其自然對界(

natural alignment

)條件分配空間。

成員按照它們被宣告的順序在記憶體中順序儲存,第乙個成員的位址和整個結構的位址相同。

自然對界

(natural alignment)

即預設對齊方式,是指按結構體的成員中

size

最大的成員對齊。

例如:struct naturalalign ;

//我的問題:如果上面的結構改為

struct naturalalign

; sizeof

的結果是6還是

4呢?在上述結構體中,

size

最大的是

short

,其長度為

2位元組,因而結構體中的

char成員a

、c都以2

為單位對齊,

sizeof(naturalalign)

的結果等於6;

如果改為:

struct naturalalign ;

其結果顯然為12。

2.2指定對界

一般地,可以通過下面的方法來改變預設的對界條件: ·

使用偽指令

#pragma pack (n)

,編譯器將按照

n個位元組對齊; ·

使用偽指令

#pragma pack ()

,取消自定義位元組對齊方式。

注意:如果

#pragma pack (n)

中指定的

n大於結構體中最大成員的

size

,則其不起作用,結構體仍然按照

size

最大的成員進行對界。

例如:#pragma pack (n)

struct naturalalign ;

#pragma pack () 當

n為4、

8、16時,其對齊方式均一樣,

sizeof(naturalalign)

的結果都等於

12。而當n2時,其發揮了作用,使得sizeof(naturalalign)的結果為8(而大於n

struct的成員對齊

struct 的成員對齊 intel 微軟等公司曾經出過一道類似的面試題 include pragma pack 8 struct example1 struct example2 pragma pack int main int argc,char argv 問程式的輸入結果是什麼?答案是 8 1...

struct的成員對齊

1struct 的成員對齊 intel 微軟等公司曾經出過一道類似的面試題 include pragma pack 8 struct example1 struct example2 pragma pack int main int argc,char argv 問程式的輸入結果是什麼?答案是 8 ...

struct的成員對齊

intel 微軟等公司曾經出過一道類似的面試題 1.include 2.pragma pack 8 3.struct example1 4.8.struct example2 9.14.pragma pack 15.int main int argc,char argv 16.問程式的輸入結果是什麼...