看一个对象的占内存大小
#pragma pack(8)
#include<iostream>
using namespace std;
class A
{//空类
};
class B{
int i;//有一个整数型数据
};
class C{
int i;//4 这里需要注意内存对齐 8+8=16
double d;//8
};
class D{
int i;//4<span style="white-space:pre"> </span>
double d;//8 8+8=16
void show(){}//0
};
class E{
int i;//4
double d;//8<span style="white-space:pre"> </span>
virtual void show(){}//4 virtual指针 vptr =8 (系统是64位,8*8,故指针字节数8) 8+8+8=24
};
int main(int argc,char**argv)
{
B b;
A a;
C c;
D d;
E e;
cout<<"sizeof A="<<sizeof(a)<<endl;
cout<<"sizeof B="<<sizeof(b)<<endl;
cout<<"sizeof C="<<sizeof(c)<<endl;
cout<<"sizeof D="<<sizeof(d)<<endl;
cout<<"sizeof E="<<sizeof(e)<<endl;
return 0;
}
/*
sizeof A=1
sizeof B=4
sizeof C=16
sizeof D=16
sizeof E=24
*/
/*
在面试中有时会问到某个类或对象所占内存的大小,今天先总结一下,其实这涉及到C++的内存布局,等以后有时间好好总结一下,今天就把想到的一些记录一下:
1. 普通的成员函数不会占内存,但是普通的成员变量占内存
2. Static的变量和函数都不会占内存。
3. Virtual成员函数(包括纯虚函数)会占内存,因为会有一个vptr指向virtual table的原因,所以不管有多少个virtual函数,均只占一个sizeof(vptr)=4
4. 派生类:需要加上其基类的size
*/