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()是不计算的。

    • 代码区存储程序的代码
    • 数据区存放全局变量和静态变量,与常量 其实可以细化为全局/静态数据区与常量数据区
    • 栈中存放局部变量与传来的参数
    • 堆是动态分配使用的
  • 相关阅读:
    Papervision3D Essentials中文版,附Papervision3D_2.1.920.swc和章节练习源码
    谷歌Chrome浏览器上安装调试(debugger)版本的Flash Player
    Flash运行时错误代码解释说明
    XML
    Android手机与电脑互通
    mysql
    j2ee
    Linux
    C_obj
    maven
  • 原文地址:https://www.cnblogs.com/StormWendy/p/8476326.html
Copyright © 2011-2022 走看看