关于C++地址对齐

来源:百度知道 编辑:UC知道 时间:2024/06/23 01:30:54
class A
{
int a;
short c;
double b;
bool e;

};
这个类的大小为24我能理解,可是下面的这个类的大小为什么为40呢?回答好的有加分。简单的地址对齐我明白,别复制答案。我想知道的是含有类对象的类的地址对齐问题?

class B
{
char a;
A m;
int b;
bool c;
};

1楼zdl_361:别胡说。没有虚函数,哪来的虚函数表指针?!人家楼主都比你明白,问的是地址对齐。

对齐是编译器的事,为了提高存取效率。

对齐和对象类型没关系,和对象的声明顺序和大小有关。一般系统把对象的开始地址对齐到4的倍数。 如你的B类中char类型在第一位,肯定占4,虽然它大小是1.

其实不必深究具体怎么对齐,声明的顺序还是按可读性考虑。因为考虑对齐而刻意改变声明顺序对于系统的空间效率或时间效率没有实际意义。

B:m为24Bytes
B中对齐后a,b,c都占4Bytes
然后加上虚函数表指针4Bytes
总共就是40Bytes

你能理解A的实例为24为什么会不能理解下面这个呢?

VC和gcc的对齐方案是不同的。
gcc是按4字节一致对齐,但是vc不一定,可能是4字节,也可能是8字节,而且这个可以通过编译器选项设置。

这些全是编译器决定的东西,不必细究。

4+24+4+8=40啊!

m占24个字节!

因为m是类A的成员啊!