兩句話
(1)各成員變數在結構體(類)中的位址偏移是自身大小(或與指定對齊係數之間較小者)的整數倍;
(2)結構體(類)大小是最大成員變數(或與指定對齊係數之間較小者)整數倍;
環境
在64位機器環境。
1、舉例一:
struct aaaa;
結果,sizeof(aa)=12
分析:a佔1byte;b佔4byte,b的偏移為自身大小(4byte)整數倍,所以a後面有3byte補齊,所以到b有8byte;c佔1byte,此時總共9byte。又因為總數為最大成員(b,佔4byte)整數倍,所以後面又有3byte補齊,總共12byte。
2、舉例二:
struct aaaa;
sizeof(aa)=8
3、舉例三:
#pragma pack(2)//取最小
struct aaaa;
sizeof(aa)=8
如果pragma pack和__attribute__
同時指定呢?以__attribute__ 的為準。
需要說明的是,不管pragma
pack和__attribute__如何指定,結構體內部成員的自對齊仍然按照其自身的對齊值。
C語言記憶體位元組對齊小結
在c語言面試和考試中經常會遇到記憶體位元組對齊的問題。今天就來對位元組對齊的知識進行小結一下。首先說說為什麼要對齊。為了提高效率,計算機從記憶體中取資料是按照乙個固定長度的。以32位機為例,它每次取32個位,也就是4個位元組 每位元組8個位,計算機基礎知識,別說不知道 位元組對齊有什麼好處?以int...
C語言記憶體位元組對齊小結
在c語言面試和考試中經常會遇到記憶體位元組對齊的問題。今天就來對位元組對齊的知識進行小結一下。首先說說為什麼要對齊。為了提高效率,計算機從記憶體中取資料是按照乙個固定長度的。以32位機為例,它每次取32個位,也就是4個位元組 每位元組8個位,計算機基礎知識,別說不知道 位元組對齊有什麼好處?以int...
C語言 位元組對齊(記憶體對齊)
1 平台原因 移植原因 不是所有的硬體平台都能訪問任意位址上的任意資料,某些硬體平台只能在某些位址處取某些特定型別的資料,否則丟擲硬體異常 2 硬體原因 經過記憶體對齊之後,cpu的記憶體訪問速度大大提公升。1.對齊原則 原則1 資料成員對齊規則 結構 struct 或聯合 union 的資料成員,...