c++ sizeof和alignof区别

时间:2021-09-07
本文章向大家介绍c++ sizeof和alignof区别,主要包括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;
}

原文地址:https://www.cnblogs.com/sunbines/p/15240551.html