回覆列表
  • 1 # 使用者2765225597601

    VC和GCC預設的都是4位元組對齊,程式設計中可以使用#pragma pack(n)指定對齊模數。出現以上差異的原因在於,VC和GCC中對於double型別的對齊方式不同。 Win32平臺下的微軟VC編譯器在預設情況下采用如下的對齊規則: 任何基本資料型別T的對齊模數就是T的大小,即sizeof(T)。比如對於double型別(8位元組),就要求該型別資料的地址總是8的倍數,而char型別資料(1位元組)則可以從任何一個地址開始。 Linux下的GCC奉行的是另外一套規則:任何2位元組大小(包括單位元組嗎?)的資料型別(比如short)的對齊模數是2,而其它所有超過2位元組的資料型別(比如long,double)都以4為對齊模數。 複雜型別(如結構)的預設對齊方式是它最長的成員的對齊方式,這樣在成員是複雜型別時,可以最小化長度。 struct{char a;double b;} 在VC中,因為結構中存在double和char,按照最長資料型別對齊,char只佔1B,但是加上後面的double所佔空間超過8B,所以char獨佔8B;而double佔8B,一共16Byte。 在GCC中,double長度超過4位元組,按照4位元組對齊,原理同上,不過char佔4位元組,double佔兩個4位元組,一共12Byte。

  • 中秋節和大豐收的關聯?
  • 形容好東西的句子有哪些?