码迷,mamicode.com
首页 > 编程语言 > 详细

c++类的大小

时间:2018-02-27 01:08:22      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:AC   def   char*   div   内存对齐   nio   vptr   代码区   分配   

做题的时候发现一个题目求类的sizeof()大小,复制了网友的解答:

#pragma pack(2)
class BU
{
    int number; // 4
    union UBffer
    {
        char buffer[13]; // 13
        int number; // 4
    }ubuf; // union的大小取决于它所有的成员中,占用空间最大的一个成员的大小,并且需要内存对齐,这里因为#pragma pack(2),所以union的大小为14,如果不写#pragma pack(2),那么union大小为16【因为与sizeof(int)=4对齐】
    void foo(){} //0
    typedef char*(*f)(void*); //0
    enum{hdd,ssd,blueray}disk; // 4
}bu;
 
因此sizeof(union) = 4+14 +0 +0 +4 = 22

类的大小计算的时候,只包括:

  1. 类的非静态成员数据的类型大小之和.
  2. 如果有虚函数的话,还要加上指向虚函数的指针(vptr)大小
  3. 边缘调整后的大小
  4. 与类中的构造函数,析构函数以及其他的成员函数无关.

据说,类的成员是类的所有对象共享的,放在程序的代码区,这部分区域sizeof()是不计算的。

  • 代码区存储程序的代码
  • 数据区存放全局变量和静态变量,与常量 其实可以细化为全局/静态数据区与常量数据区
  • 栈中存放局部变量与传来的参数
  • 堆是动态分配使用的

c++类的大小

标签:AC   def   char*   div   内存对齐   nio   vptr   代码区   分配   

原文地址:https://www.cnblogs.com/StormWendy/p/8476326.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!