随笔 - 51, 文章 - 1, 评论 - 41, 引用 - 0
数据加载中……

CPPEXP —— 空类的大小

说明

  • 编译器为不含任何成员的空类分配大小为1的空间,这样空类定义的变量地址不会与其相邻定义的变量地址相同。
  • 编译器会在空类的子类中优化掉这多分配的空间。
  • 带虚析构函数的空类不是严格意义的空类,它包含虚函数表指针,因此其大小为指针的大小。

实验代码

  1. /**
  2. * @file empty_size.cpp
  3. * @brief 测试空类的大小
  4. * @copyright public domain
  5. */
  6. #include<iostream>
  7. class Empty { };
  8. class SubEmpty : public Empty
  9. {
  10. protected:
  11. int mInt;
  12. };
  13. class VEmpty
  14. {
  15. public:
  16. virtual ~VEmpty() = 0;
  17. };
  18. int main()
  19. {
  20. std::cout << "Empty class: " << sizeof(Empty) << std::endl;
  21. std::cout << "SubEmpty: " << sizeof(SubEmpty) << std::endl;
  22. std::cout << "VEmpty: " << sizeof(VEmpty) << std::endl;
  23. std::cout << "Void*: " << sizeof(void*) << std::endl;
  24. return 0;
  25. };

运行及结果

> g++ empty_size.cpp
> a.exe
Empty class: 1
SubEmpty: 4
VEmpty: 8
Void*: 8




posted on 2016-04-16 18:13 lemene 阅读(244) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理