请问下面这个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个
[解决办法]
不要自作聪明地认为知道一个类或结构体的大小,你根本无法知道.
[解决办法]