转:C++中的类所占内存空间总结
类所占内存的大小是由成员变量 (静态变量除外 )决定的, 成员函数(这是笼统的说,后面会细说) 是不计算在内的。 摘抄部分 : 成员函数还是以一般的函数一样的存在。a.fun()是通过fun(a.this)来调用的。所谓成员函数只是在名义上是类里的。其实成员函数的大小不在类的对象里面, 同一个类的多个对象共享函数代码。而我们访问类的成员函数是通过类里面的一个指针实现 , 而这个指针指向的是一个table,table里面记录的各个成员函数的地址 (当然不同的编译可能略有不同的实现)。所以我们访问成员函数是间接获得地址的。所以这样也就增加了一定的时间开销,这也就是为什么我们提倡把一些简短的,调用频率高的函数声明为inline形式(内联函数)。 (一) class CBase { }; sizeof(CBase)=1; 为什么空的什么都没有是1呢? c++要求每个实例在内存中都有独一无二的地址 。//注意这句话!!!!!!!!!! 空类也会被实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了。所以空类的sizeof为1。 (二) class CBase { int a; char p; }; sizeof(CBase)=8; 记得 对齐的问题 。int 占4字节//注意这点和struct的对齐原则很像!!!!! char占一字节,补齐3字节 (三)