2012-12-16 86 views
2

所以說我有一個「結構」像這樣的:數組和單獨初始化之間的區別?

struct Vertex 
{ 
    float posX, posY, posZ; 
} 

當我宣佈3浮動(4字節左右)值。所以這個「結構」總共約12個字節。

但如果我把它寫這樣的:

struct Vertex 
{ 
    float pos[3]; 
} 

我仍然得到上述同樣的效果呢? 12字節?有什麼不同?

+5

*「因此,所有這一切'結構'是大約12個字節。」*也許。取決於對齊和包裝(儘管我相信在大多數情況下,你會是對的)。如果你需要*知道問問編譯器(用'sizeof')。 – dmckee

回答

2

理論上,第一種情況下編譯器允許在各個字段之間添加填充,而第二種情況下不允許(數組必須是連續的元素序列)。

所以,理論上第一個struct可能需要更多的空間,實際上他們可能會有相同的大小/內存佈局。

顯然,在第一種情況下,您可以使用三個成員的名稱來訪問這些數據,而在第二種情況下,您將使用pos成員的數組語法。

2

我能想到一個不同點:如果你的變量大小大於pack,編譯器會填充posX,posY,posZ以使它們很好地對齊。 最重要的是當你進行二進制讀寫時。

通常,使用某些填充存在嚴重的性能原因,因爲具有未對齊數據的饋送處理器可能會產生嚴重後果。

相關問題