【问题标题】:Alignment and size guarantees for single member structs单个成员结构的对齐和大小保证
【发布时间】:2017-06-20 19:56:43
【问题描述】:

给定一个(可能是非 POD)struct,它只有一个成员,没有继承,也没有虚拟方法:

struct Foo {
    Bar value;

    Foo() { /* do something */ }
};

C++ 是否保证FooBar 具有相同的对齐方式和sizeof?如果不是,那么可以提供哪些保证?当我将Bar 修复为特定类型(POD、基本类型、...)时,是否可以提供一些保证?

【问题讨论】:

  • IIRC 至少有一个编译器将所有类大小四舍五入为 4 的倍数,因此只有一个 char 成员的类将具有 3 个字节的填充。

标签: c++ struct alignment sizeof


【解决方案1】:

没有这样的保证。特别是,编译器很可能会填充到value 成员的末尾。它们不必具有相同的对齐要求。

你可以保证

  1. 第一个成员value的地址与结构体的地址相同。

  2. sizeof(Foo) 不小于sizeof(Bar)(否则指针运算会严重中断)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-18
    • 2011-11-06
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    • 2012-08-07
    相关资源
    最近更新 更多