2013-02-08 64 views
0

給大家提個問題。你們中許多人會回答「沒有區別」,但我有點固執是有區別的,由於問題的措辭:「?哪個類使用的內存量最少的」一類變量的排列

他們要求一個單一的答案 - 必須有一個!我曾與前任微軟實習生聊過,他堅持說沒有答案。

也許有些人會在乎提供他們的想法?

Which class uses the least amount of memory? 

class A 
{ 
    float duration; 
    char code; 
    int count; 
    bool enabled; 
}; 

class B 
{ 
    float duration; 
    int count; 
    char code; 
    bool enabled; 
}; 

class C 
{ 
    char code; 
    int count; 
    bool enabled; 
    float duration; 
}; 

class D 
{ 
    bool enabled; 
    float duration; 
    char code; 
    int count; 
}; 
+1

有時候,編譯器插入填充,因爲它是體系結構的要求還是因爲它允許更快的訪問。無論如何,如果沒有指定實現,就不能指定大小。 – AraK 2013-02-08 20:39:35

+0

哪個使用最少?你如何使用'sizeof'並找出(針對該編譯器)? – chris 2013-02-08 20:39:36

+0

也許你應該閱讀有關[數據結構對齊](http://en.wikipedia.org/wiki/Data_structure_alignment) – GWW 2013-02-08 20:40:23

回答

0

在MSVC2010我得到

A = 16個字節 B = 12個字節 C = 16個字節 d = 16個字節

這可能是由於不同類型的對齊。由於char和bool都很小,它們共享一個DWORD。

但是這是編譯器和平臺無關的。沒有什麼能夠阻止編譯器實現者將它們全部變成相同的大小,或者使char 64字節或其他。該標準的要求對這種事情相當寬鬆。

+0

當我問這個問題時,他們似乎很懶惰。正如其他人所說的(而且正如我的同學和我所說的),他們應該真的給了編譯器。謝謝你的幫助 :) – DerryHolt 2013-02-08 21:49:12

0

答案E,這一個:-)

class E 
{ 
    float duration; 
    char code; 
    int count; 
    bool enabled; 
} __attribute__((packed)); 

沒有什麼可以爲其他的例子可以說,它實際上取決於編譯器,弓,...