Visual Studio 2015调试器中的C ++代码。平台:窗口10
观察窗口显示:
名称: functionPointer 值:0x012812d0 类型:void(*)(float)
名称: printStuff 值:0x01282440 类型:void(浮动)
名称:& printStuff 值:0x01282440 类型:void(*)(float)
但是,输出窗口显示:
functionPointer = 012812D0 printStuff = 0x012812D0& printStuff = 0x012812D0 这是印刷品功能
map
输出
答案 0 :(得分:0)
这种行为似乎是因为增量链接。启用时,该功能汇集在一个存储器地址中,另一个地址包含一个跳转表条目,其中一条跳转指令指向“实际”地址。始终通过调用跳转表来调用该函数。如果禁用增量链接,则通过跳转表的“绕行”将消失,您的示例案例也只显示一个地址。
其他所有内容似乎都显示跳转表的地址,但'printStuff'和'& printStuff'监视表达式显示了功能代码所在的实际地址。