【发布时间】:2012-10-02 01:04:19
【问题描述】:
这是一个简单的问题。先写代码。
struct A {
int x;
};
struct B {
bool y;
};
struct C {
int x;
bool y;
};
在主函数中,我调用
cout << " bool : " << sizeof(bool) <<
"\n int : " << sizeof(int) <<
"\n class A : " << sizeof(A) <<
"\n class B : " << sizeof(B) <<
"\n class C : " << sizeof(C) << "\n";
结果是
bool : 1
int : 4
class A : 4
class B : 1
class C : 8
为什么 C 类的大小是 8 而不是 5? 请注意,这是在 MINGW 4.7 / Windows 7 / 32 位机器中使用 gcc 编译的。
【问题讨论】:
-
@Marlon 那么,填充的主要目的是什么?
-
@Sungmin:想想数组。
-
额外的空间是padding,但目的是alignment:大多数架构更适合对齐访问数据,所以一个32位的@987654325 @ 对齐到 4 个字节比未对齐的内存访问更快(有时甚至是原子的)。在某些架构中情况更糟,您不能直接使用未对齐的类型。