读书人

请教上面这个sizeof(struct data)为

发布时间: 2012-10-07 17:28:51 作者: rapoo

请问下面这个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个?后面不补齐?

读书人网 >C语言

热点推荐