C結構體內存對齊

2021-08-31 13:58:11 字數 664 閱讀 1768

struct mystc

這樣的乙個結構體多大?反正不是1+4+2位元組。

在記憶體中,結構體內的元素分布不是緊挨著依次排布的,而是存在著「記憶體對齊

因為硬體原因,讀取記憶體要按照一定的偏移量來儲存,那麼儲存資料也相應按照一定的偏移量儲存,也就是相應元素型別的長度。

所以在記憶體中,每個元素都「以為」記憶體中「全是自己」,所以元素的儲存位址值一定是自身長度的整數倍

所以在記憶體中,結構體mystr差不多長這樣:

為什麼最後還要占有兩個空位元組?

因為要為接下來的記憶體分配考慮,接下來的元素也需要對齊啊。

總結下來結構體內存分配的規律:

並且,如果將上面的結構體元素重新排列下,例如這樣:

struct mystr

這樣,算一算結構體變得多大?

對,變成了8個位元組,少了兩個位元組啊!!

所以在宣告結構體時,盡量注意:

將較短型別放在前邊,較長型別置後

C 結構體內存對齊

最近工作時需要用到記憶體對齊,查了資料。發現比較亂且觀點不一,因此驗證並總結。下面所寫都是在實際中得到驗證。環境 xp,vc6.0.記憶體對齊又稱位元組對齊,可以加快系統的處理速度。在結構體中的儲存中尤其重要,那麼系統對齊是按照什麼方式呢?每個特定平台上的編譯器都有自己的預設 對齊係數 也叫對齊模數...

結構體內存對齊

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

結構體內存對齊

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