c++ - C++ 结构中的奇怪行为

标签 c++ memory-management sizeof unions

我知道 Union 成员共享内存空间,所以我希望下面的代码输出 9 和 9。但是,我得到 12 和 9。为什么?

union Sample_union {
    int x;
    char array [9];
};
int main(){
    Sample_union sample;
    cout<<sizeof(sample)<<endl;
    char test [9];
    cout<<sizeof(test)<<endl;
}

我也在不同的编译器中测试了以下代码。

最佳答案

这是因为填充。

如果 union 包含一个 int,编译器在这种情况下希望确保 union 数组中的所有 int 都将对齐到 4 字节边界。

另一方面,

char 没有对齐要求,因此填充 9 个字符的数组没有意义。

例如对于 g++,如果您添加一个 double 成员, union 的大小变为 16(因为 double 对齐是 8 个字节)。

关于c++ - C++ 结构中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27623704/

相关文章:

C++:获取传递给函数的多维数组的行大小

c - 为什么此代码打印 "False",尽管 int 的大小大于 -1?

c++ - C++中具有空数组的类的大小

c++ - 使用 (void*) 作为标识符的一种类型

C++ 不匹配运算符 <<

c++ - 为必须可平凡复制的 volatile 结构分配一个值

python - 异常抛出 : read access violation. **bp** 是 0xFFFFFFFFFFFFFFFF

C++如何在两个单词之间获取字符串/字符

java - Protobuf 生成器 : set string field without memory allocation

javascript - Chrome 的脚本内存优化