Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在gdb中计算变量/函数_C++_C_Gdb_Mmap - Fatal编程技术网

C++ 在gdb中计算变量/函数

C++ 在gdb中计算变量/函数,c++,c,gdb,mmap,C++,C,Gdb,Mmap,我有以下代码 ... char* seg = mmap(0, ...) printf("seg=%x\n", seg); ... 程序打印时使用seg=b7ffd000。在gdb中(对于相同的执行),当使用p/x seg时,它打印$2=0x0。我在这里感到困惑。它不是同一个varseg?为什么价值观不同 PS:在mmap中,第一个参数最好是映射内存的地址,返回值是映射内存的实际地址。现在您已经在注释中回答了我的问题,我可以回答了 printf结果中显示的值是实际地址。您在调试器中将0视为seg

我有以下代码

...
char* seg = mmap(0, ...)
printf("seg=%x\n", seg);
...
程序打印时使用
seg=b7ffd000
。在gdb中(对于相同的执行),当使用
p/x seg
时,它打印
$2=0x0
。我在这里感到困惑。它不是同一个var
seg
?为什么价值观不同


PS:在
mmap
中,第一个参数最好是映射内存的地址,返回值是映射内存的实际地址。

现在您已经在注释中回答了我的问题,我可以回答了


printf
结果中显示的值是实际地址。您在调试器中将
0
视为
seg
的值,因为启用优化后,编译器可以自由地执行各种奇怪的操作(这通常会使逐步调试变得棘手)。“可观察到的”行为应该总是正确的(假设您不依赖任何未定义的行为)。

您是在启用优化的情况下编译的吗?是的,删除-O3后,问题就消失了。对为什么感兴趣。比如哪个值是内存的实际地址,启用了优化。。。