Subject: Re: sbrk() semantics ....
To: Andrew Cagney <firstname.lastname@example.org>
From: Chris G Demetriou <Chris_G_Demetriou@LAGAVULIN.PDL.CS.CMU.EDU>
Date: 03/09/1995 19:52:36
> Below is what I understand to be the semantics of sbrk. Firstly is this
> correct and secondly should the manual page reflect this (the copy I had
> didn't :-).
> sbrk(invalid-arg) return -1
> sbrk(0) return `curbrk' -- current break
> sbrk(N) tmp = `curbrk', `curbrk' = tmp + N, return tmp
to quote the current manual page:
The brk and sbrk functions are historical curiosities left over from ear-
lier days before the advent of virtual memory management. The brk()
function sets the break or lowest address of a process's data segment
(uninitialized data) to addr (immediately above bss). Data addressing is
restricted between addr and the lowest stack pointer to the stack seg-
ment. Memory is allocated by brk in page size pieces; if addr is not
evenly divisible by the system page size, it is increased to the next
The current value of the program break is reliably returned by
``sbrk(0)'' (see also end(3)). The getrlimit(2) system call may be used
to determine the maximum permissible size of the data segment; it will
not be possible to set the break beyond the rlim_max value returned from
a call to getrlimit, e.g. ``qetext + rlp->rlim_max.'' (see end(3) for
the definition of etext).
Brk returns a pointer to the new end of memory if successful; otherwise
-1 with errno set to indicate why the allocation failed. The sbrk func-
tion returns a pointer to the base of the new storage if successful; oth-
erwise -1 with errno set to indicate why the allocation failed.
unless i'm mistaken (or just blind 8-), that documents it correctly...