El uso de la memoria no disminuye cuando se usa free ()

Estoy escribiendo una cola de bloqueo independiente del sistema operativo, hasta ahora funciona bien, pero hay un pequeño problema con la gestión de la memoria. No estoy seguro de si es un problema de gcc o mío. Problema: la memoria aumenta cuando el elemento se agrega a la lista, pero cuando el elemento se elimina de la lista (free (elementPointer);) el uso de la memoria no cambia.

PERO cuando uso pthreads, productores N y consumidores M(1<N<20, 1<M<20) el uso de la memoria es de ~ 10 mb todo el tiempo (cuando se intenta agregar y eliminar elementos de ~ 10kk), por lo que parece que free está funcionando.

Y lo curioso es que en VS 2010 (el mismo código, sin hilos) funciona bien, la memoria se libera (administrador de tareas supervisadas).

Hice la prueba, agregué 1kk elementos, luego de agregar todos, eliminé uno por uno todos los elementos (sin hilos).

Linux - 0.08 segundos

Windows ~ 57 segundos

Linux (sin gratis) - 0.07 segundos

Windows (sin gratis) - 0.9 segundos

Entonces, la pregunta es, ¿por qué la memoria no se libera en Linux C cuando no se usan subprocesos? Puedo publicar el código si es necesario.

Versión GCC: 4.4.3

Respuestas a la pregunta(3)

Su respuesta a la pregunta