zoukankan      html  css  js  c++  java
  • c++ sizeof和alignof区别

    sizeof : 获取内存存储的大小。
    alignof : 获取地址对其的大小,POD里面最大的内存对其的大小。

     1 struct A{ //non-POD type
     2     int avg;
     3     int avg2;
     4     double c;
     5     A(int a,int b):avg((a+b)/2){
     6 
     7     }
     8 };
     9 
    10 struct B{
    11     int avg;
    12     int avg2;
    13     char c;
    14 };
    15 using namespace std;
    16 int main() {
    17 
    18     cout<<"sizeof(A):"<<sizeof(A)<<endl;
    19     cout<<"alignof(A):"<< alignof(A)<<endl;
    20 
    21     cout<<"sizeof(B):"<<sizeof(B)<<endl;
    22     cout<<"alignof(B):"<< alignof(B)<<endl;
    23 }

    输出结果:

    sizeof(A):16
    alignof(A):8
    sizeof(B):12
    alignof(B):4
    

    std::aligned_storage可以看成一个内存对其的缓冲区,原型如下:

    template<std::size_t Len, std::size_t Align >= /default-alignment/>

    Len表示所存储类型的sie, Align表示该类型的内存对齐大小

    #include <iostream>
    using namespace std;
    
    struct A
    { //non-POD type
      int avg;
      int avg2;
      double c;
      A(int a, int b) : avg((a + b) / 2) {}
    };
    
    int main()
    {
      typedef std::aligned_storage<sizeof(A), alignof(A)>::type A_pod;
      A_pod a, b;
      new (&a) A(10, 20);
      b = a;
      // cout<<b.avg<<endl;//错误
      //  cout<< reinterpret_cast<A>(b).avg<<endl;//错误
      cout << reinterpret_cast<A &>(b).avg << endl; //正确
      return 0;
    }
  • 相关阅读:
    21 情态动词
    20 动词的用法
    19 完成时/现在完成时和过去完成时的区别
    18 将来时
    17 一般过去时和过去进行时
    16 一般现在时和现在进行时
    15 There / Here be句型
    14 不定量表达法
    13 副词
    12 形容词
  • 原文地址:https://www.cnblogs.com/sunbines/p/15240551.html
Copyright © 2011-2022 走看看