c++类的大小

做题的时候发现一个题目求类的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()是不计算的。

  • 代码区存储程序的代码
  • 数据区存放全局变量和静态变量,与常量 其实可以细化为全局/静态数据区与常量数据区
  • 栈中存放局部变量与传来的参数
  • 堆是动态分配使用的
原文地址:https://www.cnblogs.com/StormWendy/p/8476326.html