可能重複:
Why isn’t sizeof for a struct equal to the sum of sizeof of each member?自定義類的C++ sizeof返回不正確的值?
考慮下面的類,沒有其他數據成員:
typedef uint32_t id_t;
typedef int64_t loc_t;
class foo:
{
public:
enum bar : uint8_t
{
BAR1,
BAR2,
BAR3
};
private:
id_t id;
loc_t start;
loc_t stop;
bar std;
};
任何人都可以解釋爲什麼:
的sizeof(id_t)返回4 ...
的sizeof(loc_t)返回8 ...
的sizeof(巴)返回1 ...4+(2 * 8)1 = 21
然而:
的sizeof(FOO)返回32?
拆卸杆枚舉類型的uint8_t要求僅成功地製作的sizeof(巴)返回4(INT)而的sizeof(富)仍返回32時24能夠適當字節對齊的。
編輯:爲什麼已經圓滿的回答。我感謝所有評論爲每個人帶來不同細節的人。
我需要的修復是能夠使用sizeof()創建文件位置偏移量。因此,當我以二進制格式將文件寫入文件時,如果稍後給出它的位置,我可以立即找到該文件的位置。如果我找到一個優雅的解決方案,我會在此更新。
這聽起來像你已經意識到如果對齊的概念。對齊計算的哪一部分是你不瞭解的? – Mysticial
我只是沒有想到擴展到8字節對齊......我的想法是24字節(在實際存儲爲「int」的情況下)將被對齊。在bames53下面明確地表明瞭我的判斷錯誤。 – user1445306