这与我的观点相矛盾。该标准不允许对我有意义的零大小的对象,因为它避免了两个不同的对象共享相同的内存地址,因此空类必须具有至少一个字节的大小。
一个测试这个想法的天真程序:
#include <iostream>
using namespace std;
class MyClass {};
int main()
{
MyClass myClassInstance;
std::cout << sizeof(MyClass);
return 0;
}
正如预期的那样,sizeof(MyClass)
是1个字节。
但是,编译器在堆栈上分配恰好16个字节或0x10h。
以下是具体示例:
sub $0x10, %esp
,它从扩展堆栈指针中减去16,从而产生128位的分配大小。
如果对象的大小只有1个字节,为什么编译器会分配16个字节?