sizeof数据对齐问题

来源:互联网 发布:linux rpm 路径 编辑:程序博客网 时间:2024/06/05 09:45

关于数据对齐问题,需要注意以下两点: 

1)当成员变量的长度都小于处理器位数时,所有成员变量所占的总空间一定是最长的变量所占空间的整数倍;

2)如果某一成员变量长度大于处理器位数,则以处理器的位数为对齐单位;


示例程序和分析如下,


#include <iostream>using namespace std;struct A1{int a;static int b;};struct A2{int a;char c;};struct A3{float a;char c;};struct A4{float a;int b;char c;};struct A5{double d;float a;int b;char c;};void main(){cout<<sizeof(A1)<<endl;cout<<sizeof(A2)<<endl;cout<<sizeof(A3)<<endl;cout<<sizeof(A4)<<endl;cout<<sizeof(A5)<<endl;}

执行结果如下;



分析如下:

A1:sizeof只计算栈中分配的大小,而b是静态变量,位于全局数据区,所以不占用栈的空间,所以A1的大小只是a占用的空间,即4;

A2:数据对齐,int大小为4;char大小为1,扩展为4,所以A2为8;

A3:数据对齐:float大小为4;char大小为1,扩展为4,所以A3为8;

A4:数据对齐:float大小为4;int大小为4;char大小为1,扩展为4,所以A3为12;

A5:数据对齐:double大小为8;float大小为4,int大小为4,float和int共占8;char大小为1,考虑对齐,扩展为8;所以A4为24;