首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请教上面这个sizeof(struct data)为什么在visual studio上是48,在linux上是44

2012-10-07 
请问下面这个sizeof(struct data)为什么在visual studio下是48,在linux下是44?typedef union {long i int

请问下面这个sizeof(struct data)为什么在visual studio下是48,在linux下是44?
typedef union {long i; int k[5]; char c;} DATE2;
struct data
{
  char a[10];
  DATE2 cow;
  int cat;
  double dog;
};
sizeof(struct data)= ???
linux下的44我可以理解,内存空洞,自动补齐。window下的结果不理解。

[解决办法]
vs系列默认按最长的对齐,double是8字节,所以是48
gcc在32位下默认是4字节对齐,因此是44
[解决办法]
Vs默认#pragma pack(8)
[解决办法]
默认对齐下
double占8字节
那么整个结构体大小必然是8的整数倍

char a[10]; 占12个
DATE2 cow; 占20个
int cat; 占4个
空白位置4个
double dog; 占8个
[解决办法]
不要自作聪明地认为知道一个类或结构体的大小,你根本无法知道.
[解决办法]

探讨

引用:

默认对齐下
double占8字节
那么整个结构体大小必然是8的整数倍

char a[10]; 占12个
DATE2 cow; 占20个
int cat; 占4个
空白位置4个
double dog; 占8个

char a[10]; 为什么占12个?不是8的倍数?
DATE2 cow; 为什么占20个?后面不补齐?

热点排行