Re: [問題] 兩題C++面試題的詢問

作者: plsmaop (plsmaop)   2018-04-04 10:42:12
※ 引述《Cosmology (宇宙學型男)》之銘言:
: 2.
: struct test
: {
: int a;
: char b;
: short c;
: double d;
: char e;
: };
: test這個大小是多少?
: 我可以理解關於記憶體對齊的問題
: 所以我答總共是24 bytes
: 面試官接著問為什麼是24 以及那他們在系統內的記憶體位置是如何?
: 我回答
: int 4
: char 4(對齊後)
: short 4(對齊後)
: double 8
: char 4(對齊後)
: 所以總共是24 (我的概念可能有錯...)
: 他說24是對的 但是位置的概念不正確 叫我回去測試看看
: 我回家測試(以下都起始位置)
: a 9435088
: b 9435092
: c 9435094
: d 9435096
: e 9435104
: 我理解可能char short那邊可能答錯了
: 但是即便是這樣 e那個位置對齊以後末三碼應該是108
: 88到108應該也是20個bytes阿...
: 有前輩可以指點我哪裡概念有錯誤嗎?
: 或是能夠提供方向讓我找資料 謝謝
https://en.m.wikipedia.org/wiki/Data_structure_alignment
在Typical alignment of C structs on x86這個條目下有說,會把整個struct湊成其中
最大的type的大小的倍數
如果我沒有理解錯的話,整個struct大小會是8*3=24
Int 4
Char 1 ,塞一個1 ,short 2
Double 8
Char 1,塞7個
作者: descent (「雄辯是銀,沉默是金」)   2018-04-04 23:34:00
感謝分享
作者: friends29 (涼哥哥)   2018-04-05 16:22:00
我也是把char算1 byte欸

Links booklink

Contact Us: admin [ a t ] ucptt.com