Managing the Heap
Each Unix process owns a specific memory region called the
heap, which is used to satisfy the process’s
dynamic memory requests. The start_brk
and brk
fields of the memory descriptor delimit
the starting and ending addresses, respectively, of that region.
The following APIs can be used by the process to request and release dynamic memory:
malloc(size)
Requests
size
bytes of dynamic memory; if the allocation succeeds, it returns the linear address of the first memory location.calloc(n,size)
Requests an array consisting of
n
elements of sizesize
; if the allocation succeeds, it initializes the array components to 0 and returns the linear address of the first element.realloc(ptr,size)
Changes the size of a memory area previously allocated by
malloc( )
orcalloc( )
.free(addr)
Releases the memory region allocated by
malloc( )
orcalloc( )
that has an initial address ofaddr
.brk(addr)
Modifies the size of the heap directly; the
addr
parameter specifies the new value ofcurrent->mm->brk
, and the return value is the new ending address of the memory region (the process must check whether it coincides with the requestedaddr
value).sbrk(incr)
Is similar to
brk( )
, except that theincr
parameter specifies the increment or decrement of the heap size in bytes.
The brk( )
function differs
from the other functions listed because it is the only one implemented
as a system call. All the other functions are implemented in the C
library by using brk( )
and mmap( )
.[*]
When a process ...
Get Understanding the Linux Kernel, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.