結構體內存對齊詳解

2021-07-04 05:42:00 字數 504 閱讀 5998

.在32位機器上

設有以下說明和定義:

1234567891011 typedef union date; struct data too; date max;

則語句 printf(「%d」,sizeof(struct data)+sizeof(max));的執行結果是:

(答案:52)

這道題可能很多同學都有誤區,不明白記憶體對齊的真正含義,那麼下面我來講解一下,首先共用體裡面你們肯定都是明白的,date是乙個union, 變數公用空間. 裡面最大的變數型別是int[5], 占用20個位元組. 所以它的大小是20 。

但是到了結構體裡面,其實它是這樣的,首先乙個int,然後後面5個int,再然後是乙個double,所以最大的成員長度是8不是20,然後6個int剛剛24,然後加上8是32,加上共用體是52,如果你把第乙個int cat去掉,你仍然會發現,結構體大小還是32,因為8個位元組記憶體對齊,前面2個int一組,最後還單乙個int也要佔8個位元組。希望能對記憶體對齊不明白的童鞋有所幫助。

結構體內存對齊詳解

一 什麼是對齊,以及為什麼要對齊 1.現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定變數的時候經常在特定的記憶體位址訪問,這就需要各型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。2.對齊的作...

結構體內存對齊

結構體內存對齊 一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這...

結構體內存對齊

一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的...