c語言位元組對齊的計算方式

2021-10-06 23:42:53 字數 1112 閱讀 5614

結構體的位元組對齊,在筆試中經常考到,我們先給出結論,然後以兩道例題位元組對齊的計算方式。

(1)struct/class的自身對齊值。對於結構體和類的自身對齊值是所有成員中最大的自身對齊值。結構體和類的對齊原則:先將資料成員對齊,再將結構體和類自身對齊,最終大小與資料成員順序相關。

(2) union的自身對齊值是所有成員中最大的對齊值。union的對齊規則,只需要union自身對齊,不需要資料成員對齊,最終大小與資料成員順序無關。

(3) 指定對齊值。可以使用 #param pack(2)指定對齊值為n,使用#parama back()恢復預設對齊值(預設對齊值一般為4)

(4)有效對齊值。有效對齊值=min(類/結構體/成員的自身對齊值,指定對齊值)

(5)有效對齊值決定了資料存放的方式,sizeof運算子是根據有效對齊值計算大小的

struct data

;int

main()

輸出為8.

a的其實位址為0,結束位址為3,起始位址4是1(char的長度)的整數倍,因此b的位址為4.此時5不是2(short)的證書被因此填充到6,c的位址為5 ~ 7

輸出為12;

假設b的其實位址為0,起始位址1不為4(int的長度)的倍數,所以填充到4,注意c結尾也需要被填充。因此長度為12

輸出為8,與上面同理

using namespace std;

#pragma pack(2)

union ubfferubuf;

intmain()

若將#param pack(2)去掉,結果便為1

c語言位元組對齊

現代計算機中記憶體空間都是按照byte劃分的,從理論上講似乎對任何型別的變數的訪問可以從任何位址開始,但實際情況是在訪問特定型別變數的時候經常在特 定的記憶體位址訪問,這就需要各種型別資料按照一定的規則在空間上排列,而不是順序的乙個接乙個的排放,這就是對齊。基本資料型別自身對齊,也叫自然對齊。就是說...

C語言位元組對齊

一 概念 對齊跟資料在記憶體中的位置有關。如果乙個變數的記憶體位址正好位於它長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設乙個整型變數的位址為0x00000004,那它就是自然對齊的。二 為什麼要位元組對齊 需要位元組對齊的根本原因在於cpu訪問資料的效率問題。假設上面整型變數的位址不...

C語言位元組對齊

一 概念 對齊跟資料在記憶體中的位置有關。如果乙個變數的記憶體位址正好位於它長度的整數倍,他就被稱做自然對齊。比如在32位cpu下,假設乙個整型變數的位址為0x00000004,那它就是自然對齊的。二 為什麼要位元組對齊 在c語言中,結構是一種復合資料型別,其構成元素既可以是基本資料型別 如int ...