【发布时间】:2016-05-03 15:27:41
【问题描述】:
在使用大量指针调试一些 C++ 代码时,如果运行之间的内存地址相同,那将很有用。有没有办法使在执行相同内存分配的程序的连续运行之间返回的一系列地址具有确定性?
也许是一个环境变量或可以为调试堆设置的东西?
我知道您希望发布版本随机化有很多充分的理由,但确定性在某些情况下对调试很方便(例如,在修改图表时某些东西没有正确链接)。
【问题讨论】:
-
“有没有什么办法可以使执行相同内存分配的程序连续运行之间返回的一系列地址具有确定性?”恐怕没有这不是从程序的重复运行中获取相同地址的方法。
-
我同意@πάνταῥεῖ。在请求内存时,无论是从静态存储还是动态存储,您都受操作系统的支配。如果它在不同的地址加载您的程序并在您请求内存时为您提供不同的地址,那么您的程序将无能为力。
-
地址空间布局随机化很可能是最大的原因。 en.wikipedia.org/wiki/…
-
在 Windows 上禁用 ASLR:stackoverflow.com/questions/9560993/…
-
您可能想要替换
operator new。在您自己的版本中,创建一个大内存映射(显然这需要 x64)并从此块顺序分配。
标签: c++ visual-studio memory allocation deterministic