Я не уверен, почему две системы будут вести себя по-разному (возможно, разные реализации malloc от разных glibc). Однако вы должны иметь возможность контролировать глобальную политику вашего процесса с помощью вызова, подобного:
mallopt(M_TRIM_THRESHOLD, bytes)
(Подробнее см. в этой статье linuxjournal ).
Вы также можете запросить немедленное освобождение с помощью звонка, например
malloc_trim(bytes)
(см. Malloc.h). Я считаю, что оба эти вызова могут потерпеть неудачу, поэтому я не думаю, что вы можете полагаться на то, что они работают 100% времени. Но я думаю, что если вы попробуете их, вы обнаружите, что они имеют значение.