所以說我有一個「結構」像這樣的:數組和單獨初始化之間的區別?
struct Vertex
{
float posX, posY, posZ;
}
當我宣佈3浮動(4字節左右)值。所以這個「結構」總共約12個字節。
但如果我把它寫這樣的:
struct Vertex
{
float pos[3];
}
我仍然得到上述同樣的效果呢? 12字節?有什麼不同?
所以說我有一個「結構」像這樣的:數組和單獨初始化之間的區別?
struct Vertex
{
float posX, posY, posZ;
}
當我宣佈3浮動(4字節左右)值。所以這個「結構」總共約12個字節。
但如果我把它寫這樣的:
struct Vertex
{
float pos[3];
}
我仍然得到上述同樣的效果呢? 12字節?有什麼不同?
理論上,第一種情況下編譯器允許在各個字段之間添加填充,而第二種情況下不允許(數組必須是連續的元素序列)。
所以,理論上第一個struct
可能需要更多的空間,實際上他們可能會有相同的大小/內存佈局。
顯然,在第一種情況下,您可以使用三個成員的名稱來訪問這些數據,而在第二種情況下,您將使用pos
成員的數組語法。
我能想到一個不同點:如果你的變量大小大於pack,編譯器會填充posX,posY,posZ以使它們很好地對齊。 最重要的是當你進行二進制讀寫時。
通常,使用某些填充存在嚴重的性能原因,因爲具有未對齊數據的饋送處理器可能會產生嚴重後果。
*「因此,所有這一切'結構'是大約12個字節。」*也許。取決於對齊和包裝(儘管我相信在大多數情況下,你會是對的)。如果你需要*知道問問編譯器(用'sizeof')。 – dmckee