[爆卦]memory alignment面試是什麼?優點缺點精華區懶人包

為什麼這篇memory alignment面試鄉民發文收入到精華區:因為在memory alignment面試這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者Cosmology (宇宙學型男)看板C_and_CPP標題[問題] 兩題C++面試題的詢問時間...


先說是面試題 所以會有一些奇怪的寫法

晚輩還是剛入行的新人 若有冒犯 請見諒

1.

class A
{
public:
virtual void foo(int a = 0)
{
printf("A %d\n", a);
}
};

class B : public A
{
public:
virtual void foo(int a = 1)
{
printf("B %d\n", a);
}
};

A *p = new B();
p->foo();

我答結果是 B 1

面試官說你回去試試看 結果回家測試的結果是 B 0

我可以理解virtual function的用法
但是唯獨那個a我並不能理解為什麼是0...


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阿...

有前輩可以指點我哪裡概念有錯誤嗎?
或是能夠提供方向讓我找資料 謝謝











--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 136.60.160.77
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1522727559.A.A71.html
bluesoul: 因為virtual function default parameter是看你怎樣呼叫 04/03 12:00
bluesoul: https://goo.gl/XtGJjV 04/03 12:01
Caesar08: 第二個可以google intel data alignment and structure 04/03 12:03
bluesoul: 第二點是我們不知道實際上會怎樣被放 04/03 12:03
Caesar08: 對,但是不知道為甚麼,面試都很愛考這個 04/03 12:11
stupid0319: 錄取了嗎? 04/03 14:06
dzwei: 第一題effective c++有 04/03 15:34
dzwei: 我記得是給初始值之後的virtual func 04/03 15:34
dzwei: 就會變成靜態綁定了 04/03 15:34
dzwei: 所以實作上用virtual func 04/03 15:39
dzwei: 根本不可以給parmeter的預設值 04/03 15:39
super6602: 第二題還是看complier 看cpu怎麼fetch最快 04/03 20:42
kyushu: 搞不懂考這種特例的用意是什麼? 04/03 21:12
ilikekotomi: 第一題 剛剛回去翻Effective C++ 在37條 04/03 22:55
plsmaop: ent 04/04 10:37
plsmaop: 維基說整個大小會是最大的type的倍數 04/04 10:37
plsmaop: 所以這個例子是double的8byte乘上3,變成24 04/04 10:38
s0914714: alignment跟compiler有關 不同compiler有可能不同大小 04/04 13:15
s0914714: 原PO回答也沒錯阿 以4byte當alignment就是這種情形 04/04 13:45
s0914714: alignment主要是考量到效率以及有些架構如果沒有對齊 04/04 13:50
s0914714: 會有fault 所以可能的情形會很多XD 04/04 13:50
brighton16: 考試喜歡考沒多大用處的特例,可以顯示出題人的優越感 04/04 22:13
Philethan: 推推 07/08 15:42

你可能也想看看

搜尋相關網站