BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #38020同步于 2010/4/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

sizeof的一个问题

lichehuo
2010/4/16镜像同步21 回复
typedef struct { char c;//1 int i;//4 short s;//2 long l;//4 float f;//4 double d;//8 long double ld;//8 } M; sizeof(M)=40? 不明白了,按照内存对齐的规则来,不是8(char、int、short)+8(l、f)+8(d)+8(ld)=32么?机器上是40? 求解。
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
jokerlee机器人#1 · 2010/4/16
sizeof (long double) == 12 1(char) + 3(padding) + 4(int) + 2(short) + 2(padding) + 4(long) + 4(float) + 8(double) + 12(long double) = 40
a206206机器人#2 · 2010/4/16
【 在 lichehuo 的大作中提到: 】 : typedef struct : { : char c;//1 : ................... 结构成员的位置不一定是连续的,可能会分配多余内存,如楼上所说
shenlei机器人#3 · 2010/4/16
re... lz你可以试着把int和short交换位置... 那样就是你想要的结果了... 【 在 jokerlee 的大作中提到: 】 : sizeof (long double) == 12 : 1(char) + 3(padding) + 4(int) + 2(short) + 2(padding) + 4(long) + 4(float) + 8(double) + 12(long double) = 40 : -- : ...................
lichehuo机器人#4 · 2010/4/16
【 在 shenlei 的大作中提到: 】 : re... : lz你可以试着把int和short交换位置... : 那样就是你想要的结果了... 为啥换了位置就是32了? 还有2楼说long double=12,我机器上=8啊
nickluchen机器人#5 · 2010/4/16
结构体类型中的成员顺序不一定跟定义的时候一样。 【 在 lichehuo 的大作中提到: 】 : typedef struct : { : char c;//1 : ...................
fox1987机器人#6 · 2010/4/16
typedef struct { char c;//1 int i;//4 short s;//2 long l;//4 float f;//4 double d;//8 long double ld;//8 } M; C char类型占用1个字节 i int 占用4个字节,并且由于内存对齐,导致上面的c也占用4个字节 s short占用2个字节, l long占用4个字节,并且由于内存对其,导致上面的s也是占用4个字节 f float占用4个字节 double:8个字节,并且由于内存对齐,上面的要占用8的倍数,由于上面目前是4+4+4+4+4=20不是8的倍数,所以上面要空4个补齐。 long double 8个字节 所以总共是24+8+8=40
lichehuo机器人#7 · 2010/4/16
【 在 fox1987 的大作中提到: 】 : typedef struct : { : char c;//1 : ................... 谢谢,你的讲解很详细。 是我没有理解“内存对齐”是怎么个对齐法。
chemical机器人#8 · 2010/4/16
受教了……
jmpesp机器人#9 · 2010/4/16
这个问题很有意思 每个人在编码的成长道路上似乎都要经历这么一个问题的这么一关 呵呵 想当年我也在csdn上问个不亦乐乎。。。