gcc下内存对齐
[code=C/C++][/code]
struct s0
{
char b;
double c;
}s0;
看资料和自己的理解,这个s0在gcc占用空间应该是1+3+8=12吧!怎么我测试的都是16呢?
[解决办法]
cygwin 也有64位的。
[解决办法]
如果double换成int的话,这个结果应该是8, double本身就占8位地,在结构体对齐原则中,貌似有个和占最大字节对齐地。如果double换成 short,你感觉应该是几呢啊?
[解决办法]
在32位的虚拟机下测试了一下是12,cygwin大概是跟vs一样,默认8
[解决办法]
不知道默认pack值的话 就自己指定
#pragma pack(4) 结果12
#pragma pack(8) 结果16
[解决办法]
你8字节对齐的
[解决办法]
- C/C++ code
应该是8+8=16。因为double型8个字节,所以按8字节对齐。那些说机器字长的家伙误人子弟。这是和编译器相关。
[解决办法]
在6楼已经说了,32位虚拟机下测试是12,大概是cygwin下的gcc的问题,竟然还有人说是8字节对齐
vs系列的默认8,但是32位系统下,gcc默认是4
[解决办法]
[解决办法]
在缺省参数下, 结构体成员会按自然边界对齐。比如 double 类型是8字节,所以double c 需要对齐8字节边界。
所以char b 后会由7字节的空白, sizeof(struct s0) 自然就是 8 + 8 = 16.
[解决办法]
才看到内存对齐。。我也觉得是12.。