1.平台原因(移植原因) : 不是所有的硬體平台都能訪問任意位址上的任意資料的, 某些硬體平台只能在某些位址處取某些特定型別的資料,否則丟擲硬體異常。
2. 效能原因:資料結構應該盡可能邊界對齊。原因在於, 為了訪問未對齊的記憶體,處理器需要兩次記憶體訪問,而對齊的記憶體訪問僅需要一次訪問。(比如char a; int b; 為了讀取b,首先都從4的整位元組倍數開始讀取, 先從位址0~3開始,留下1~3,然後從位址4開始,4~7,留下位址4, 最後將兩個合併。)
對齊規則:
規則:1.資料成員對齊規則, 結構(struct)(或聯合(union)的資料成員), 第乙個資料成員放在offset為0的地方, 以後每個資料的對齊按照自身長度對齊
2.結構體的總大小為結構體的有效對齊值的整數倍(結構體內資料成員的最大位元組的整數倍)
結構體的有效對齊值的確定:
1)當未明確指定時,以結構體中最長的成員的長度為其有效值
2) 當用#pragma pack(n)指定時,以n和結構體中最長成員的長度中較小者為其值
3) 當用_attribute_ ((_packed)) 指定長度時,強制按照此值為結構體的有效對齊值 。
記憶體對齊的原因調查
在讀 c專家程式設計 的3.2.1關於結構 struct pid tag 很有意思,嚴格遵守了字對齊,字對齊的原因 用法在課堂也曾提到過,用法為 pragma pack n n 1,2,4,8,16 當記憶體存放沒有對齊的時候會影響機器效能,一直都記著這句話,卻知其然不知其所以然,今天偶然翻看 計算...
記憶體對齊 記憶體對齊規則解釋 記憶體對齊原理
一 記憶體對齊的原因 我們都知道計算機是以位元組 byte 為單位劃分的,理論上來說cpu是可以訪問任一編號的位元組資料的,我們又知道cpu的定址其實是通過位址匯流排來訪問記憶體的,cpu又分為32位和64位,在32位的cpu一次可以處理4個位元組 byte 的資料,那麼cpu實際定址的步長就是4個...
記憶體對齊(自然對齊)
參考 今天與超,暉,棟,宇幾人論此問題,終得以下結論,不知正確與否,姑且記下。對於32位機,cpu的記憶體讀寫週期是4word,所以在記憶體對齊時,皆以此填滿。如 struct a char a double b char c sizeof a 4 8 4 16 struct b char a do...