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