原則1:結構體的資料成員,第乙個資料成員放到[0]的位置,以後每個資料成員的起始位置要從該成員大小或成員子成員大小(如陣列)的整數倍開始;
原則2、結構體作為成員,如果乙個結構中有某些結構體成員,則結構體成員要從其內部最大的整數倍位址開始儲存(struct a中公有struct b,b中有char,int,double等元素,則b應該在8(double)的整數倍開始儲存);
原則3、結構體的總大小,必須是其內部最大成員的整數倍,不足的要補齊;
struct b;
// i[4] + 空白[4] (根據原則1,因為要補全到下乙個double的8)+ d[8] + f[4] + 空白[4](根據原則3,要補全到最大(double)的整數倍,即從20補全到24) = 24.
struct a;
// char[1] + char[1] + 空白[2](根據原則1,要補全到int的整數倍) + id[4] + score[8] + grade[2] + 空白[6](根據原則2,因為b中最大的是double,所以要從18補全到24) + b[24] =48(正好是b的整數倍,不用補全).
int main()
根據記憶體對齊原則,我們可以採取一些技巧,例如要把大的資料型別放到前面,能得到記憶體優化。
注:上述規則是在windows下的記憶體對齊,在linux下預設規則是:兩位元組資料型別為2的整數倍,較大的為4的整數倍。
C語言記憶體位元組對齊小結
在c語言面試和考試中經常會遇到記憶體位元組對齊的問題。今天就來對位元組對齊的知識進行小結一下。首先說說為什麼要對齊。為了提高效率,計算機從記憶體中取資料是按照乙個固定長度的。以32位機為例,它每次取32個位,也就是4個位元組 每位元組8個位,計算機基礎知識,別說不知道 位元組對齊有什麼好處?以int...
C語言記憶體位元組對齊小結
在c語言面試和考試中經常會遇到記憶體位元組對齊的問題。今天就來對位元組對齊的知識進行小結一下。首先說說為什麼要對齊。為了提高效率,計算機從記憶體中取資料是按照乙個固定長度的。以32位機為例,它每次取32個位,也就是4個位元組 每位元組8個位,計算機基礎知識,別說不知道 位元組對齊有什麼好處?以int...
C語言記憶體位元組對齊小結
兩句話 1 各成員變數在結構體 類 中的位址偏移是自身大小 或與指定對齊係數之間較小者 的整數倍 2 結構體 類 大小是最大成員變數 或與指定對齊係數之間較小者 整數倍 環境 在64位機器環境。1 舉例一 struct aaaa 結果,sizeof aa 12 分析 a佔1byte b佔4byte,...