zoukankan      html  css  js  c++  java
  • sizeof

    sizeof内存对齐

    1 #include "iostream" 

    2 using namespace std; 

    3   

    4 void main() 

    5 {    

    6     class A   

    7     {   

    8         

    9  

    10          

    11     }a;   

    12  

    13      

    14    cout<<sizeof(a)<<endl; 

    15  

    16 } 

    运行结果是:1.空类占用的内存大小是1,空类没有数据成员,但是必须分配一定的空间,说明其存在,只好定义为一个最小的char大小

    2,看代码:

    [cpp] view plaincopy

    17 #include "iostream" 

    18 using namespace std; 

    19   

    20 void main() 

    21 {    

    22     class A   

    23     {   

    24         

    25  

    26        typedef char* (*f)(void*);   

    27     }a;   

    28  

    29      

    30    cout<<sizeof(a)<<endl; 

    31  

    32 } 

    运行结果是:1.类中加了个typedef定义,但是并不是类的成员,不计入内存

    3,看代码:

    [cpp] view plaincopy

    33 #include "iostream" 

    34 using namespace std; 

    35 #pragma pack(2)  

    36 void main() 

    37 {     

    38     class A   

    39     {   

    40         unionU   

    41        {   

    42            char buff[13];   

    43            int i;   

    44        }u;   

    45         voidfoo() {    }   

    46         inti;   

    47        enum{red, green, blue} color;  

    48   

    49        typedef char* (*f)(void*);   

    50     }a;   

    51  

    52      

    53    cout<<sizeof(a)<<endl; 

    54  

    55 } 

    输出结果:22. sizeof(u)=13+1,sizeof (i)=4;sizeof(color)=4,typedef 不占用内存 总计 22.

    [cpp] view plaincopy

    56 #pragma pack(2) 表示内存按照2字节对齐 

    4,看代码[cpp]view plaincopy

    57 #include "iostream" 

    58 using namespace std; 

    59 void main() 

    60 {    

    61     class A   

    62     {   

    63         unionU   

    64        {   

    65            char buff[13];   

    66            int i;   

    67        }u;   

    68         voidfoo() {    }   

    69         inti;   

    70        enum{red, green, blue} color;  

    71  

    72        typedef char* (*f)(void*);   

    73     }a;   

    74  

    75      

    76    cout<<sizeof(a)<<endl; 

    77  

    78 } 

    运行结果:24.去掉 [cpp]view plaincopy

    79 #pragma pack(2) 之后,默认以类中或者结构中最大的变量字节对齐。 

  • 相关阅读:
    SpringBoot优雅的全局异常处理
    react格式化展示json
    Pycharm调试按钮
    HttpURLConnection和okhttp的使用
    objection自动生成hook代码
    hookString
    python取中位数 位运算
    scrapy mongo pipeline
    xpath tips
    IT日语
  • 原文地址:https://www.cnblogs.com/lsx1993/p/4841830.html
Copyright © 2011-2022 走看看