C和C++不同:在C中struct/class不占有内存,C++中,struct/class通常占有1byte,原因是编译器强 行在里面放了一个char,这样可使这个class的不同实例化在内存中分配到独一无二的地址
1、最基本的内存对齐情况
首先确定最大类型的大小->按照结构体中类型声明顺序来分配空间。
eg1.
struct A
{
char c; //1byte
double d; //8byte
int i; //4byte
}
sizeof (A)=24; (1+7+8+4+4)
eg2.
struct A
{
double d; //8byte
char c; //1byte
int i; //4byte
}
sizeof (A)=16; (8+1+4+3)
2、稍复杂一点的内存对齐情况
class A
{
public:
static double dd;
char c; //1byte
double d; //8byte
static A a;
int i; //4byte
};
sizeof (A)=24; (1+7+8+4+4)
3、内存对齐深入情况
class A
{
public:
virtual ~A();
char c; //1byte
double d; //8byte
int i; //4byte
}
32位系统:预先给vptr分配4byte的空间 。sizeof (A)=24; (4+1+3+8+4+4)
64位系统:预先给vptr分配8byte空间。 sizeof (A)=32; (8+1+7+8+4+4)