空类大小
# C++空类/结构体大小为什么是1Byte?
C++标准中规定,任何不同的对象不能拥有相同的内存地址,空类/结构体大小如果为0,则会违反这个规定。
C++空类/结构体大小是1Byte(和编译器有关),是为了保证两个不同对象的地址不同。看下面代码,如果空类大小为0,两个对象地址一样合理吗?
class Empty {};
int main(int argc, char** argv)
{
Empty a, b;
(&a == &b);
return 0;
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
为什么不是4Byte,8Byte?可能是为了节省空间,1Byte是寻址的最小单位。
当然空基类不需要单独的字节表示,这种优化是安全的并有用的,现在有些编译器提供了这种“空基类优化”。
上次更新: 2022/06/17, 07:22:19