Chinaunix
标题:
x64上sizeof是不是有问题?感觉是问题
[打印本页]
作者:
shaohui973
时间:
2014-04-28 14:36
标题:
x64上sizeof是不是有问题?感觉是问题
代码如下:
size_t memlen0 = 0;
memlen0 = 64 * sizeof(STDSPCB);
--------------------------------------------
objdump后
44be3d: 48 c7 45 c0 56 34 12 movq $0x123456,-0x40(%rbp)
44be44: 00
44be45: c7 45 c0 00 c0 00 00 movl $0xc000,-0x40(%rbp)
44be4c: c7 45 c4 00 01 00 00
movl $0x100,-0x3c(%rbp)
正确的计算时,memlen0的值应该为0xc000,但是在64位机器上,编译器在高4字节处添加了0x100,导致这个值变成了0x1000000c000,导致我使用这个值去malloc吃光内存。
printf(“0x%lx, 0x%lx\n”,memlen0, sizeof(STDSPCB));
对于这个打印,正确计算是应该位0x300,但是,64位系统上编译器貌似又在高4字节处添加了0x100,结果打印位0x400000300
编译器为 gcc4.4.7
作者:
MMMIX
时间:
2014-04-28 14:56
回复
1#
shaohui973
你那个 STDSPCB 是啥?
作者:
shaohui973
时间:
2014-04-28 15:07
回复
2#
MMMIX
自定义的结构体
作者:
windoze
时间:
2014-04-28 15:14
回复
3#
shaohui973
2楼估计已疯……
作者:
shaohui973
时间:
2014-04-28 15:34
回复
4#
windoze
????
作者:
shaohui973
时间:
2014-04-28 17:04
找出来了。
妈妈的,有人对我的枚举最后一个值赋值成0xffffffff,太他妈坑了。
作者:
Wizmann
时间:
2014-04-28 17:49
没看明白, LZ给详细说说。。。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2