У меня есть программа на C++, которая сравнивает различные алгоритмы на входных массивах разной длины. Это выглядит более или менее, как это:Сбор мусора/сжатие с malloc()
# (1)
for k in range(4..20):
# (2)
input = generate 2**k random points
for variant in variants:
benchmark the following call
run variant on input array
# (3)
Можно ли сбросить все управление кучи в (2) в состояние, было в (1)? Вся память, выделенная в куче, которая была распределена во время программы, гарантируется освобождением в (3).
Я использую g ++ 4.3 для Linux.
Редактировать: Я понимаю, что в C/C++ нет реальной сборки мусора. Я хочу заставить выделение памяти присоединиться к смежным пустым кускам памяти, которые он имеет в своем свободном списке в (2).
C/C++ даже не гарантирует, что существует свободный список. Язык не заботится о том, как работает управление памятью. Это все зависит от ОС. Таким образом, единственный способ обеспечить аналогичное состояние в # 2 - это, как предложил jpalecek и RnR, начать новый процесс. – jalf
Я надеялся, что система времени исполнения gcc имеет функцию, которую я мог бы как-то вызвать. Это не должно быть переносимым. – Manuel
Manuel - у вас есть два решения: jpalecek, который может быть проще и быстрее реализовать, а мой - портативный и дает 100% гарантию относительно результатов (с вилкой успешные процессы наследуют другую среду - та, в которой n-1 другие процессы были раздвоены), используйте их :) – RnR