c++类的内存布局面试题

一、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

猜你喜欢

转载自blog.csdn.net/jangdong/article/details/80913642