可能重复:
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