C++类成员存储大小
1、对象分布图
2、解析
每个类的大小只有其成员变量大小,其中包括:类成员属性,虚函数指针;
而其他没有如:静态变量【静态区】,普通函数、静态函数【代码区】
3、总结
类对象的sizeof只包含成员变量的大小,不包含函数的大小【就跟结构体一样】,因为函数被放在了代码区,类对象调用代码的时候会把对象的指针传到函数那里,函数根据这个对象指针访问对象的内部属性
4、代码
class A{ private: int a; //4 bytes char b; //4 bytes int c; //4 bytes const int d=0;//4 bytes static int e; //0 bytes,存储在全局/静态区 public: virtual void vTest() //4 bytes,与返回值无关,只要有虚函数则有虚函数指针,占4bytes { } static void sTest() //0 bytes,存储在公共代码区,参数个数为0 { } void test() //0 bytes,存储在公共代码区,参数个数为1【对象的this指针】 { } }; int A::e;
ps:C中空结构体sizeof为0;C++中空结构体和空类sizeof为1【C++原则:任何不同的对象不能拥有相同的内存地址。如果空类对象大小为0,那么此类数组中的各个对象的地址将会一致,明显违反了此原则】
长风破浪会有时,直挂云帆济沧海!
可通过下方链接找到博主
https://www.cnblogs.com/judes/p/10875138.html