www.thecareerplus.com
The CareerPlus
Home Technical Resources Programming Arrays and Pointers
Thursday 09th September 2010
 
 
What are brk() and sbrk() used for? How are they different from malloc()?

Discuss it!          


brk() and sbrk() are the only calls of memory management in UNIX. For one value of
the address, beyond the last logical data page of the process, the MMU generates
a segmentation violation interrupt and UNIX kills the process. This address is known
as the break address of a process. Addition of a logical page to the data space implies
raising of the break address (by a multiple of a page size). Removal of an entry
from the page translation table automatically lowers the break address.
brk()and sbrk() are systems calls for this process char *brk(char *new_break); char *sbrk(displacement) Both calls return the old break address to the process. In brk(), the new break address
desired needs to be specified as the parameter. In sbrk(), the displacement (+ve
or -ve) is the difference between the new and the old break address. sbrk() is very
similar to malloc() when it allocates memory (+ve displacement).
malloc() is really a memory manager and not a memory allocator since, brk/sbrk only
can do memory allocations under UNIX. malloc() keeps track of occupied and free peices
of memory. Each malloc request is expected to give consecutive bytes and hence malloc
selects the smallest free pieces that satisfy a request. When free is called, any
consecutive free pieces are coalesced into a large free piece. These is done to avoid
fragmentation.
realloc() can be used only with a preallocated/malloced/realloced memory. realloc()
will automatically allocate new memory and transfer maximum possible contents if
the new space is not available. Hence the returned value of realloc must always be
stored back into the old pointer itself.

Discuss it!          

CrackTheIntervew.NET
Advertisement
 
Top! Top!