2011-06-17 47 views
1

我想知道關於結構的尺寸分配的邊界問題是什麼? 任何我能谷歌相同的關鍵字應該會有所幫助。關於結構的邊界問題

+0

這是很難在這個時候提供答案。你能提供更多關於你實際上遇到問題的信息嗎? – OzBandit 2011-06-17 11:46:05

回答

3

要計算用戶定義類型的大小,編譯器會考慮複雜用戶定義數據結構所需的任何空間。這就是爲什麼C中結構的大小可能大於其成員大小之和的原因。例如,在許多系統中,以下代碼將打印:

struct student{ 
    char grade; /* char is 1 byte long */ 
    int age; /* int is 4 bytes long */ 
}; 

printf("%zu", sizeof (struct student)); 

這樣做的原因是,大多數的編譯器,通過默認,對齊複雜的數據結構,以一個word對準邊界。另外,單個成員也與它們各自的對齊邊界對齊。通過這種邏輯,結構學生在單詞邊界上對齊,結構內的變量年齡與下一個單詞地址對齊。這是通過編譯器在兩個構件之間或在結構的末端插入「填充」空間來滿足對齊要求來實現的。插入此填充以將年齡與字邊界對齊。 (大多數processors可以獲取一個aligned word速度比他們可以獲取該橫跨在存儲器中的多個字一個字值,有的不支持運行在所有)

引用的文章:data structure alignmentStructure padding