1、引言
對於結構體來經常會涉及到記憶體對齊問題,如下面**所示:
現在已經佔了9位元組的長度,但是實際上所佔長度為12,這為什麼呢?我們看記憶體對齊規則二。
規則二:
在struct或者union元素對齊後,struct或者union整體也要進行對齊操作,對齊將按照,#pragma pack和struct或者union中成員中最大資料成員中較小的那個進行;
則對於以上的例子來說,pragma pack為4,結構體中最大資料成員長度也為4,則結構提整體以4位對齊係數進行對齊,已經有9個位元組,則補3位元組為12位元組。所以整個結構體長度為12。
3、其他對場景舉例
* 場景一:
整體struct對齊係數為:pragma pack(1) 和 float中較小者為 1;
則整體結構體所佔長度為8.
*場景二:
現在所佔位元組為:9
整體struct對齊係數為:pragma pack(8) 和 float中較小者為 4;
則整體結構體所佔長度為12。
4、結尾
記憶體對齊對於c/c++程式設計師來說是必須要掌握的乙個點,也是各種面試和筆試中常考的點,至此將記憶體對齊做了乙個總結,以備後續查閱。
C C 記憶體對齊
一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的...
C C 記憶體對齊
一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的...
C C 記憶體對齊
一 什麼是位元組對齊,為什麼要對齊?現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。對齊的...