zoukankan      html  css  js  c++  java
  • C++ sizeof 计算类的大小

    计算类的的大小时只考虑成员变量的大小,而不考虑成员函数的大小!

    但是如果类中含有虚函数,那么在计算类的大小时就要额外的加上4个字节!这4个字节是虚函数表占的字节数!

    在计算类的大小时还要注意一点就是 内存对齐!

    看一个例子:

    class CTest
    {
       
    char ch;
    };
    // sizeof(CTest) = 1
     
    class CTest
    {
       
    char ch;
       
    int  num;
    };

    // sizeof(CTest) = 8

    很奇怪,为什么第二个CTest的大小是8字节了,这里就涉及到了内存对齐问题

    int的大小为 4字节, 由于内存所以ch的填充3个字节!所以CTest的大小为8字节

    再来看一列:

    class CTest
    {
       
    char ch;   
       
    int  num;
       
    double b;   
    };

    // sizeof(CTest) = 16

    这里ch+num=5字节,填充到b的大小,也就是8字节!

    class CTest
    {
       
    char ch;  

        double b;
        int  num;   
    };

    // sizeof(CTest) = 24

    这里ch和num都填充到了8字节

     

    继承类大小

    class CT1()
    {
      
    int num;
    };

    class CT2 : public CT1
    {
      
    int val;
    };

    // sizeof(CT2) = 4+4 = 8;

    sizeof (继承类) = 本身成员变量+父类的大小,如果是虚拟继成的话,则另外加一个指向父类指针的大小.

    如果两个类C1,C2分别继承了含有虚函数的类C3,类C4同时继承C1和C2,那么在C4只保留一份指向虚基类C3的指针

  • 相关阅读:
    tip6: 程序不工作就是最大的异常
    简单实用的Code Review工具
    HDU4008 Parent and son [树形DP]
    HDU4004 The Frog's Games [二分]
    HDU4006 The kth great number [堆]
    HDU4024 Dwarven Sniper’s hunting [二分]
    HDU4005 The war [树形DP]
    HDU4009 Transfer water [最小树形图]
    HDU4023 Game [贪心+博弈]
    HDU4007 Dave [杂题]
  • 原文地址:https://www.cnblogs.com/CPFlying/p/1747580.html
Copyright © 2011-2022 走看看