这样的struct能占内存多少字节?求大牛!该如何处理
这样的struct能占内存多少字节??求大牛!
废话不说,直接上代码:
结果是这样的:sizeof(a)=8 sizeof(b)=8 sizeof(c)=12
不知道为什么是这样?virtual函数还能占大小???求大虾解释。
------解决方案--------------------
virtual
会有个虚拟列表,会多出个指向虚拟列表的指针,一个指针4个字节
------解决方案--------------------
拥有virtual函数的类中,需要维护一个虚函数表的指针,一个指针的大小是4字节,所以~~~
------解决方案--------------------
a 4+4 = 8
b static不占用空间 4+1+3(补齐) = 8
c vptr占用4个字节
------解决方案--------------------
我重新说明下:
1.对于A 大小为8 显然,两个int型各占4个byte
2.对于B 大小为8 一个整型4byte,一个字符型1byte,static 变量存放在程序的data segment中,和对象实体大小无关。还有一个所谓的allignment限制,也就是边界调整,对于32位的机器,调整位4byte的整数倍,主要是为了提升数据的访问速度。所以再填补3byte ,总过8byte.
3.对于C 先看下它的对象模型
_vptr ---->指向虚函数表的指针 用于virtual机制。 4byte
int m1 ---- 4byte
int m2 -----4byte
其中,_vptr的位置并不固定,vc编译器在首部,其他编译器可能在尾部。
建议楼主看下 inside c++ object model ,里面Data语意学 有详细介绍。
------解决方案--------------------
------解决方案--------------------
C类里边有个指向虚函数表的指针,所以多了四个字节
废话不说,直接上代码:
- C/C++ code
struct A { A(); ~A(); int m1; int m2; }a; struct B { B(); ~B(); int m1 char m2; static char m3; }b; struct C { C(); virtual ~C(); int m1; int m2; }c;
结果是这样的:sizeof(a)=8 sizeof(b)=8 sizeof(c)=12
不知道为什么是这样?virtual函数还能占大小???求大虾解释。
------解决方案--------------------
virtual
会有个虚拟列表,会多出个指向虚拟列表的指针,一个指针4个字节
------解决方案--------------------
拥有virtual函数的类中,需要维护一个虚函数表的指针,一个指针的大小是4字节,所以~~~
------解决方案--------------------
a 4+4 = 8
b static不占用空间 4+1+3(补齐) = 8
c vptr占用4个字节
------解决方案--------------------
我重新说明下:
1.对于A 大小为8 显然,两个int型各占4个byte
2.对于B 大小为8 一个整型4byte,一个字符型1byte,static 变量存放在程序的data segment中,和对象实体大小无关。还有一个所谓的allignment限制,也就是边界调整,对于32位的机器,调整位4byte的整数倍,主要是为了提升数据的访问速度。所以再填补3byte ,总过8byte.
3.对于C 先看下它的对象模型
_vptr ---->指向虚函数表的指针 用于virtual机制。 4byte
int m1 ---- 4byte
int m2 -----4byte
其中,_vptr的位置并不固定,vc编译器在首部,其他编译器可能在尾部。
建议楼主看下 inside c++ object model ,里面Data语意学 有详细介绍。
------解决方案--------------------
------解决方案--------------------
C类里边有个指向虚函数表的指针,所以多了四个字节