This preview shows page 1. Sign up to view the full content.
Unformatted text preview: IRTUAL MEMORY The sbrk function grows or shrinks the heap by adding incr to the kernel’s brk pointer. If successful, it returns the old value of brk, otherwise it returns -1 and sets errno to ENOMEM. If incr is zero, then sbrk returns the current value of brk. Calling sbrk with a negative incr is legal but tricky because the return value (the old value of brk) points to abs(incr) bytes past the new top of the heap. Programs free allocated heap blocks by calling the free function.
#include <stdlib.h> void free(void *ptr);
returns: nothing The ptr argument must point to the beginning of an allocated block that was obtained from malloc. If not, then the behavior of free is undeﬁned. Even worse, since it returns nothing, free gives no indication to the application that something is wrong. As we shall see in Section 10.11, this can produce some bafﬂing run-time errors. Figure 10.36 shows how an implementation of malloc and free might manage a (very) small heap of 16 words for a C program. Each box represents a 4-byte word. The heavy-lined rectangles correspond to allocated blocks (shaded) and free blocks (unshaded). Initially the hea...
View Full Document
- Spring '10
- The American