[C++] 一个空类/结构体的大小是多少?
如下一个类(或结构体),求 sizeof(Test)
的值是多少。
class Test {
};
如果测试一下的话,会发现,它的大小是 1
字节,而不是 0
字节。
为什么呢?C++ 的发明者 Bjarne Stroustrup 是这样说的:
- To ensure that the addresses of two different objects will be different.
- For the same reason, "new" always returns pointers to distinct objects.
- 保证两个不同的对象实例的地址不同;
- new 运算符总是返回两个不同的对象。
如果为 0 字节的话,还会有一些其它问题,像是:
Test* p; p++;
将不能正常工作;Test a[2]; sizeof(a)/sizeof(*a);
将会导致除零异常。
多数人应该知道上面这个答案,但是如下两个类型的又分别占用多少字节呢?
class Derived : public Test {
};
class Derived2 : public Test {
char c;
};
答案是:这 3 个类的大小都是 1 个字节。是不是觉得有点意外?
参考: