#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 條件分配空間。各個成員按照它們被宣告的順序在記憶體中順序儲存,第乙個成員的位址和整個結構的位址...