Visual Studio — Как сделать выделение памяти в MSVC C ++ детерминированным?

При отладке некоторого кода C ++ с тоннами указателей было бы полезно, если бы адреса памяти между запусками были одинаковыми. Есть ли способ сделать серию адресов, которые возвращаются между последовательными запусками программы, которые выполняют те же распределения памяти, детерминистическими?

Может быть, переменная окружения или что-то, что может быть установлено для кучи отладки?

Я знаю, что есть много веских причин, по которым вы хотите использовать рандомизацию для сборок релизов, но детерминизм удобен для отладки в некоторых ситуациях (например, что-то неправильно связывается при изменении графика).

3

Решение

(Преобразовано из комментария)

Вы можете заменить оператора новым. В вашей собственной версии создайте одно большое сопоставление памяти по фиксированному базовому адресу. Скорее всего,> 99% из них будут свободны в 64-битном адресном пространстве. Затем просто выделите последовательно из этого блока.

2

Другие решения

есть особый куча отладки это используется, который выполняет дополнительные проверки и записывает специальные значения.

Нет, такой вещи как куча отладки, но менеджер кучи отладки что готовит макет и канареек. дополнительные проверки а также особые ценности это всего лишь результат кода, скомпилированного в режиме отладки. Адреса все еще произвольны, как получено от операционной системы.

Есть ли способ сделать серию адресов, которые возвращаются между последовательными запусками программы, которые выполняют те же распределения памяти, детерминистическими?

Нет, нет способа получить одни и те же адреса для повторного выполнения вашей программы, независимо от того, используете ли вы отладочную или выпускную версию.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector