> -- Димыч писал(а):
> Если в процессе работы программы указателям, ставшим уже ненужными, присваивать значение NIL, расходование памяти происходит не так агрессивно. Если же этого не делать, то память высвобождается медленнее.Если выделенную строчку закомментировать, программа потребляет примерно вдвое больше памяти, и ее освобождение происходит медленнее.У меня наоборот получилось - если строку ":= NIL" закомментировать, то среднее и максимальное потребление памяти ниже (чаще освобождает). Вы чем пользовались для замеров? Я смотрел Performance Graph в свойствах процесса в Process Explorer v.11.20 с выборкой раз в секунду.

Кстати, почему бы не попробовать более чистый эксперимент? Вынесите тело цикла в отдельную процедуру, чтобы указатель p был локальной переменной. Такая ситуация ближе к реальности, вы ведь не будете всю программу запихивать в MAIN. Вполне возможно, что это задействует дополнительные оптимизации, и присвоение NIL не потребуется.

Ещё одна причина, по которой пример слишком надуман: когда вы делаете NEW (p#NIL), то прежнее значение указателя ещё может являться якорем и препятствовать освобождению прежнего массива. Вот, кстати, почему вынос в локальную переменную, да и прочаянормальнаяработа (не тесты) будут вести себя более адекватно. При условии, конечно, что не выключен "+GENPTRINIT" (по умолчанию включен).

Если же HEAPLIMIT # 0, то GC XDS (насколько я его знаю) освобождает память только тогда, когда доходит до верхнего предела, так что для этого случая ваш тест вообще не имеет смысла.