Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

execve(2)

getrlimit(2)

setrlimit(2)

ulimit(2)

brk(2)  —  RISC

Name

brk, sbrk − change data segment space allocation

Syntax

#include <sys/types.h>

char ∗brk(addr)
char ∗addr;

char ∗sbrk(incr)
int incr;

Description

The brk system call sets the system’s idea of the lowest data segment location not used by the program (called the break) to addr (rounded up to the next multiple of the system’s page size).  Locations greater than addr and below the stack pointer are not in the address space and thus will cause a memory violation if accessed. 

In the alternate function sbrk, incr more bytes are added to the program’s data space and a pointer to the start of the new area is returned. 

When a program begins execution by execve, the break is set at the highest location defined by the program and data storage areas.  Ordinarily, therefore, only programs with growing data areas need to use brk.

The getrlimit() 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(.). For example:

0x10000000 + rlp -> rlim_max

Return Values

Upon successful completion, the brk system call returns a value of 0 or −1 if the program requests more memory than the system limit.  The sbrk system call returns −1 if the break could not be set.

Restrictions

Setting the break may fail due to a temporary lack of swap space.  It is not possible to distinguish this from a failure caused by exceeding the maximum size of the data segment without consulting getrlimit.

Diagnostics

The sbrk system call fails and no additionally memory is allocated if one of the following is true:

[ENOMEM] The limit, as set by setrlimit() was exceeded.

[ENOMEM] The maximum possible size a data segment (compiled into the system) was exceeded. 

[ENOMEM] Insufficient space existed in the swap area to support the expansion. 

See Also

execve(2), getrlimit(2), setrlimit(2), ulimit(2)

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026