記憶體對齊小結

2021-08-09 13:13:07 字數 756 閱讀 8388

原則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,...