mmap
e sbrk
são as chamadas de sistema que o kernel fornece para alocar espaço de endereçamento aos processos. Essas chamadas alteram o mapeamento de endereços virtuais para quadros de páginas físicas. Endereçamento de memória fora dos limites de endereço desses mapeamentos é um não-não estrito e resulta em uma falha de segmentação. Essa é a interface de baixo nível que o kernel fornece para um processo, e a área de memória que termina com o endereço brk
é comumente chamada de heap.
O kernel não sabe nada sobre malloc
ou free
, estas são funções da biblioteca na libc. O Libc mantém estruturas de dados e registra quais áreas de memória estão livres do ponto de vista da alocação de memória, por exemplo, como o. Uma chamada para malloc
não necessariamente resulta em uma chamada para sbrk
ou mmap
(dependendo de como o Libc implementa a alocação de memória dinâmica) para expandir os mapeamentos, se uma chamada para malloc
puder ser satisfeita reutilizando os liberados anteriormente áreas de memória.