作者plsmaop (plsmaop)
看板C_and_CPP
標題Re: [問題] 兩題C++面試題的詢問
時間Wed Apr 4 10:42:12 2018
※ 引述《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個
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.13.182.160
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1522809734.A.EA8.html
※ 編輯: plsmaop (101.13.182.160), 04/04/2018 10:44:15
※ 編輯: plsmaop (101.13.182.160), 04/04/2018 10:45:57
推 descent: 感謝分享 04/04 23:34
推 friends29: 我也是把char算1 byte欸 04/05 16:22