看了《C++ 對像模型》的人,往往會誤以為編譯器填充是按照計算機字長填充的,如下:
class A
{
double a;
char b;
};考試大-全國教育類網(wǎng)站(www.Examda。com)
sizeof(A) == ?
不了解填充的人會以為是9,看了c++對象模型的(像我)往往會以為是12,昨晚看《程序員面試寶典》一道類似題,開始以為答案給錯了。。今天一試才知道,原來我錯了。。上題答案(在編譯器默認情況下)是 16,VC6.0、MinGW、VS.net均如此。。
《程序員面試寶典》上如是說:CPU的優(yōu)化原則大致是這樣的:對于n字節(jié)的元素(n=2、4、8……)它的首地址能被n整除,才能獲得的性能。設計編譯器的時候可以遵循這個原則。也就是說,默認情況下,編譯器往往以的變量的長度為填充長度,而不是按字節(jié)長度。當然也可以通過 #pragma pack(n) 指定編譯器的填充長度。這時候應該不是cpu的效率的情況了。
另外有個網(wǎng)友討論說道如果一個類中含有另一個類對象,是否按照包含類的長度填充呢?試驗了一下,不是這樣,而是按照語言中的基本類型的長度填充。沒想到,面試題中也會考到這么bt的題目,長見識了。
class A
{
double a;
char b;
};考試大-全國教育類網(wǎng)站(www.Examda。com)
sizeof(A) == ?
不了解填充的人會以為是9,看了c++對象模型的(像我)往往會以為是12,昨晚看《程序員面試寶典》一道類似題,開始以為答案給錯了。。今天一試才知道,原來我錯了。。上題答案(在編譯器默認情況下)是 16,VC6.0、MinGW、VS.net均如此。。
《程序員面試寶典》上如是說:CPU的優(yōu)化原則大致是這樣的:對于n字節(jié)的元素(n=2、4、8……)它的首地址能被n整除,才能獲得的性能。設計編譯器的時候可以遵循這個原則。也就是說,默認情況下,編譯器往往以的變量的長度為填充長度,而不是按字節(jié)長度。當然也可以通過 #pragma pack(n) 指定編譯器的填充長度。這時候應該不是cpu的效率的情況了。
另外有個網(wǎng)友討論說道如果一個類中含有另一個類對象,是否按照包含類的長度填充呢?試驗了一下,不是這樣,而是按照語言中的基本類型的長度填充。沒想到,面試題中也會考到這么bt的題目,長見識了。