内存对齐问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 11:56:04
class test
{
private:
//double b;
char a;
double b;
char c;
public:
virtual void h()
{
a = 's';
b = 3.0;
c = 'p';
return;
}
};

为什么sizeof后是32?

class test
{
private:
double b;
char a;
//double b;
char c;
public:
virtual void h()
{
a = 's';
b = 3.0;
c = 'p';
return;
}
};

为什么又变成24了?

我在vs2005下编的

各个编译器实现不一样,GNU编译器两个都是24,微软的通过测试可以发现第一种情况下char a; double b; char c; 各占8字节的空间,加上虚函数表最后是32.第二种情况下编译器经过优化,最后两个char变量占用空间合并了,用ultraedit看实际变成了73 70 cc cc cc cc cc cc
由此可见,应该是微软编译器在后台做了一些工作。感觉这个属于编译器层面的问题,实际运用上面意义不大,没必要深究。