Definición
La System call brk()
es necesario para entender el layout o estructura real de memoria de un proceso en Linux.
El parámetro de sbrk()
es la dirección exacta donde el nuevo break
debe estar. Por otro lado en sbrk()
se pasa el incremento al cual se le sumará al viejo break para setear el nuevo break. Si se ejecuta sbrk(0)
se obtiene la dirección del break
actual.
Nota
Redimensionar el heap (reservado o liberando memoria) es tan simple como pedirle al kernel que ajuste su idea de donde el break del proceso está.
Inicialmente el break*
del programa está ubicado justo en el final de datos no inicializados. Después que brk()
se ejecuta, el break
es incrementado, el proceso puede acceder a cualquier memoria en la nueva área reservada, pero no accede directamente a la memoria física.
Esto se realiza automáticamente por el kernel en el primer intento del proceso en acceder al área reservada