一、x86系统下
注:内存对齐是以4字节。
注:类内部数据不统一的情况下会发生内存补齐!!
1、
class CTest
{virtual void fun(){} //虚函数表 4字节。
char ch[5]; //实际是5字节,但是由于对齐 补齐3位 所以是 8字节 。
int n ; //4字节。
short m_d; //2字节 补齐2字节 所以4字节。
};
输出
//sizeof(CTest); //20
2、
class CTestA
{char ch;
};
int t = sizeof(CTestA); //1字节 不涉及内存对齐
3、
class CTestA_B
{};
int nSize = sizeof(CTestA_B); //1字节 不涉及内存对齐
4、class CTestC
{
virtual void fun(){} //虚函数表 4字节
char ch; //1字节,补齐3字节。
};
sizeof( CTestC); //8字节
5、class CTestD
{
virtual void fun(){} //虚函数表 4字节
void test(){} //注意成员函数不属于 类 所以计算大小不算在内!!!!!!
char ch; //1字节,补齐3字节。
};
sizeof( CTestD); //8字节
===============================================================
二、x64系统下
//x64 //8字节对齐
class CTestC
{
char ch; //1+3
virtual void fun(){} //8
void test(){}
int n ; //4
};
sizeof(CTestC);// 16;
这里有比较详细的内存对齐介绍:
参考地址:https://blog.csdn.net/chengonghao/article/details/51861493