2012-03-12 58 views
0

林不 「即」 新的C,但可以有一個人請賜教在這一個:的sizeof結構的sizeof VS型

printf("%d %d\n", sizeof(int), sizeof(unsigned char)); 

打印預期4和1

typedef struct 
{ 
    int a; 
    unsigned char b; 
} test 

printf("%d\n", sizeof(test)); 

打印8 ...我真的很困惑!

+2

http://en.wikipedia.org/wiki/Data_structure_alignment#Data_structure_padding – Mysticial 2012-03-12 00:45:12

回答

1

其稱爲 「alignment」。您的struct已填充。你可以在「pack」它(不同的編譯器有不同的定義方式哪種類型應包裝),然後它不會被對齊,但你可能有運行時的數據訪問的問題。

+0

你會推薦總是在1個字節的包數據,以優化尺寸或使用性能的目的,編譯器默認? – McBob 2012-03-12 00:58:39

+0

@McBob,不,恰恰相反,從來不收拾,除非你確信你需要它,你知道你在做什麼。編譯器使用的系統默認值在被忽略時可能會降低性能,並在某些系統上導致崩潰。 – littleadv 2012-03-12 01:07:18

+0

林上的網絡協議,並且每個協議命令的報頭大小的工作應該是靜態的,在這種情況下,我應該確保該尺寸將保持不變上的每個平臺正確?所以在這種情況下,我應該使用正確的標題結構包裝? – McBob 2012-03-12 01:15:34