zoukankan      html  css  js  c++  java
  • 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()是不计算的。

    • 代码区存储程序的代码
    • 数据区存放全局变量和静态变量,与常量 其实可以细化为全局/静态数据区与常量数据区
    • 栈中存放局部变量与传来的参数
    • 堆是动态分配使用的
  • 相关阅读:
    iOS 自动识别URL(链接)功能的实现
    iOS 如何查看崩溃日志
    Swift-- 闭包
    Swift--方法(函数)
    Swift--控制流
    Swift--字典的了解
    数据存储与访问之——SharedPreferences
    汇编指令之STOS、REP
    汇编指令之ADC、SBB、XCHG、MOVS指令
    pushad与popad
  • 原文地址:https://www.cnblogs.com/StormWendy/p/8476326.html
Copyright © 2011-2022 走看看