如何在MSVC C ++确定性中进行内存分配?

时间:2016-01-26 21:37:43

标签: c++ visual-studio memory allocation deterministic

在使用大量指针调试某些C ++代码时,如果运行之间的内存地址相同,则会很有用。是否有任何方法可以使执行相同内存分配的程序的连续运行之间返回的一系列地址具有确定性?

可能是环境变量还是可以为调试堆设置的东西?

我知道你希望随机化发布版本有很多很好的理由,但在某些情况下,确定性对于调试很方便(例如,在修改图形时,某些内容没有正确链接)。

2 个答案:

答案 0 :(得分:2)

(自评论转换)

您可能想要替换operator new。在您自己的版本中,在固定的基址创建单个大内存映射。在64位地址空间中有机会大于99%。然后从这个块顺序分配。

答案 1 :(得分:1)

  

有一个特殊的调试堆,用于执行额外的检查和写入特殊值。

不,没有像调试堆这样的东西,而是准备布局和金丝雀的调试堆管理器额外检查特殊值只是在调试模式下编译的代码的结果。从操作系统中获得的地址仍然是任意的。

  

有没有办法让在执行相同内存分配的程序的连续运行之间返回的一系列地址具有确定性?

无论您是否正在运行调试或发布版本,都无法获得重复执行程序的相同地址。