看一个对象的占内存大小

#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

*/

posted @ 2015-11-07 20:02  cloudren2020  阅读(111)  评论(0编辑  收藏  举报