32位機器上定義如下結構體:
struct xx
;
此結構體的大小是:24
解析如下:
首先 _x5 是靜態變數不占用空間,其次要考慮位元組對齊問題。
對於結構體中沒有含有結構體變數的情況,有兩條原則:
結構體變數中成員的偏移量必須是成員大小的整數倍;
結構體的最終大小必須是結構體最大簡單型別的整數倍。
x1 的偏移量是0,長度是8,符合;
x2 的偏移量是8,長度是1,符合;
x3 的偏移量是9,長度是4,不符合,需要在x2 之後填充3位元組使得x3 的偏移量達到12;
x4 的偏移量是16,長度是2,符合;
此時總長為(8)+(1+3)+(4)+(2)= 18;
而最大簡單型別為long long長度為8,因此需要在x4 之後再填充6位元組,使總長達到24可以被8整除。所以最後總長為24.
C語言中的結構體大小
現代計算機中,記憶體空間按照位元組劃分,理論上可以從任何起始位址訪問任意型別的變數。但實際中在訪問特定型別變數時經常在特定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序乙個接乙個地存放,這就是對齊。不同硬體平台對儲存空間的處理上存在很大的不同。某些平台對特定型別的資料只...
c語言中結構體儲存空間確定
1.使用sizeof函式可以檢視變數型別或者對應的變數所佔的空間。在vc 6.0下實驗的結果程式及結果如下 2.結構型別的占用空間要符合對齊原則和節邊界值原則。比如 includestruct x1 struct x2 struct x3 int main 結果為 對齊原則 結構中變數的儲存以該變數...
C語言中結構體占用記憶體大小
這個問題很經典,很容易出現,也叫記憶體的4k對齊吧 cpu傳輸資料的方式 cpu每次傳輸資料大小由它的總線條數決定,32位傳輸4個位元組,64位傳輸8個位元組。這裡以64位系統舉例,若宣告乙個變數大小為8位元組,起始位址位1,而cpu讀取的位址為0 7,則該變數需要讀取兩次,顯然降低了cpu的效能。...