#include <iostream> #include <string> using namespace std; // 1 class emptyClass0{ }; // 1 class emptyClass1{ public: emptyClass1(){} ~emptyClass1(){} }; // 4 class emptyClass2{ public: emptyClass2(){} virtual ~emptyClass2(){} }; // 8 class hwcBase{ public: hwcBase(){} virtual ~hwcBase(){} private: int base; }; // 12 class hwcSubFirst:hwcBase{ public: hwcSubFirst():hwcBase(){} ~hwcSubFirst(){} private: int sub; }; // 12 + 1+3, 考虑到内存对齐 class hwcSubSecond:hwcBase{ public: hwcSubSecond():hwcBase(){} ~hwcSubSecond(){} private: int sub; char sub2; }; int main() { cout<<sizeof(emptyClass0)<<endl; cout<<sizeof(emptyClass1)<<endl; cout<<sizeof(emptyClass2)<<endl; cout<<sizeof(hwcBase)<<endl; cout<<sizeof(hwcSubFirst)<<endl; cout<<sizeof(hwcSubSecond)<<endl; return 0; }
解释下:
0、1、对于一个空的类,在内存中要存在一个标示来区分,所以即使是空的,也要分配一个字节
2、同样是empty的类,但是有一个虚的析构函数,所以,保存了一个指针(vptr)指向虚表。一个指针4Byte
3、hwcBase类,有一个Int占用4Byte,一个指针(vptr),所以共占用8Byte
3、hwcSubFirst,继承来一个Int,本身有一个Int,加上一个vptr指针,共12字节
4、hwcSubSecond,和hwcSubFirst类似,但是多了一个char,考虑到内存对其,12+4 = 16字节
参考链接:https://blog.csdn.net/Hello_Hwc/article/details/41170719
原文链接: https://www.cnblogs.com/lfri/p/12420800.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/333558
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!