El montón por defecto
Aunque tengamos varios montones adicionales, el más importante es el montón por defecto. Esto es porque, internamente, cualquier reserva de memoria utilizando funciones del lenguaje como malloc, calloc, etc., se hace en el montón por defecto.
Siendo prácticos podemos decir que el siguiente bloque de código:
{
void *buffer;
buffer = malloc( 1024 );
// aquí se hace lo que sea
free( buffer );
}
Es equivalente a este otro código:
{
void *buffer;
buffer = ::HeapAlloc( GetProcessHeap(), 0, 1024 );
// aquí se hace lo que sea
::HeapFree( ::GetProcessHeap(), 0, buffer );
}
Además, cualquier reserva que haga el sistema para un proceso, también la hace en el montón por defecto. Por ejemplo, cuando hacemos una llamada a la función FindFirstFile, el sistema creará una pequeña zona de memoria para su uso interno, en el montón por defecto del proceso llamante. Esa zona de memoria se liberará con otra función, en nuestro caso con FindClose.
Debido a esto, es muy importante que los accesos al montón por defecto se hagan sincronizados, sin utilizar la bandera HEAP_NO_SERIALIZE, ya que existirán múltiples hilos que accedan a él.
Este montón, tiene un tamaño por defecto de 1 MB, de los cuales tan sólo de comprometen 4 KB.
La configuración de este parámetro depende del entorno en el que trabajemos, por poner algún ejemplo: