C C struct儲存對齊方式測試

2021-09-29 14:40:21 字數 1425 閱讀 9389

#include #include #include #include //#pragma pack(8)

#define ioffsetof(type, member) ((size_t) &((type *)0)->member)

struct stream_header;

int main()

{ stream_header test;

memset(&test,0,sizeof(test));

test.command_type=~0;

test.session_id=~0;

test.sequence_id=~0;

test.max_sequence_id=~0;

test.data_size=~0;

test.cseq=~0;

test.check_mask=~0;

int len=sizeof(stream_header);

std::cout《執行結果:

40bytes 0 ff

bytes 1 00

bytes 2 00

bytes 3 00

bytes 4 ff

bytes 5 ff

bytes 6 ff

bytes 7 ff

bytes 8 ff

bytes 9 ff

bytes 10 ff

bytes 11 ff

bytes 12 ff

bytes 13 ff

bytes 14 ff

bytes 15 ff

bytes 16 ff

bytes 17 ff

bytes 18 ff

bytes 19 ff

bytes 20 ff

bytes 21 ff

bytes 22 ff

bytes 23 ff

bytes 24 ff

bytes 25 ff

bytes 26 ff

bytes 27 ff

bytes 28 ff

bytes 29 ff

bytes 30 ff

bytes 31 ff

bytes 32 ff

bytes 33 ff

bytes 34 ff

bytes 35 00

bytes 36 00

bytes 37 00

bytes 38 00

bytes 39 00

34結論:未指定對齊位元組數時,struct按成員中最長的元資料進行對齊,此處對齊長度為64bit=8bytes。

按照8位元組進行塊儲存,**中:command_type 與session_id 被至於第乙個塊中,此區間內最大長度為4,按4位元組進行對齊儲存,由於剩餘空間不足以儲存第三個資料,故新起乙個8位元組的塊儲存第三項資料

記憶體對齊方式

看到這篇博文題目,你可能會想,什麼題目到底啥意思 首先,你在申請一塊空間時,系統會根據你所申請的空間大小,按照一定規則,給他分配一段空間的起始位址,然後你就可以安心的開始寫你的資料了。今天,這篇博文便是談一談,系統是按照怎麼樣的規則進行分配空間的。在正式開始之前,我們先小試牛刀 struct t1 ...

struct對齊方式

結構體的記憶體分配原則 原則1 資料成員對齊規則 結構 struct或聯合union 的資料成員,第乙個資料成員放在offset為0的地方,以後每個資料成員儲存的起始位置要從該成員大小的整數倍開始 比如int在32位機為4位元組,則要從4的整數倍位址開始儲存 原則2 結構體作為成員 如果乙個結構裡有...

Struct對齊方式

畢業前找工作的經歷讓我發現,很多公司的筆試 面試題中都涉及到了struct的對齊的問題!今天我們就深入探索其中的奧秘!預設情況下,編譯器為結構體的每個 成員按其自然對界 natural alignment 條件分配空間。各個成員按照它們被宣告的順序在記憶體中順序儲存,第乙個成員的位址和整個結構的位址...