#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

*/

相关文章:

  • 2021-08-28
  • 2021-08-20
  • 2022-12-23
  • 2022-01-10
  • 2021-07-28
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-03
  • 2021-10-24
相关资源
相似解决方案