Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

brk, sbrk - Größe des Datensegments verändern

&pagelevel(4)&pagelevel

Definition

#include <unistd.h>

int brk(void *addr);
void *sbrk(int incr);

Beschreibung

brk() und sbrk() werden zum dynamischen Ändern des Speicherplatzes verwendet, der dem Datensegment des aufrufenden Prozesses zugewiesen ist (vgl. exec). Die Änderung wird durch Rücksetzen des Speichergrenzwerts (’break value’) des Prozesses und Zuweisen eines entsprechenden Bereichs vorgenommen. Der Speichergrenzwert (’break value’) ist die erste nicht belegte Adresse oberhalb des Datensegments. Der Umfang des zugewiesenen Speicherplatzes erhöht sich mit der Vergrößerung des Speichergrenzwerts. Neu zugewiesener Speicherplatz wird auf null gesetzt. Wenn jedoch derselbe Speicherplatz demselben Prozess wieder zugewiesen wird, ist sein Inhalt undefiniert.

brk() setzt den Grenzwert auf addr und ändert den zugewiesenen Platz entsprechend.

sbrk() fügt incr Bytes zum Grenzwert hinzu und ändert den zugewiesenen Platz entsprechend. incr kann negativ sein. In diesem Fall wird der Umfang des zugewiesenen Speicherplatzes verringert. Der aktuelle Speichergrenzwert wird von sbrk(0) zurückgegeben.

Wenn eine Anwendung zusätzlich weitere Funktionen zur Speicherbereichsverwaltung einsetzt, wie z.B. malloc() , mmap() oder free() , ist das Verhalten von brk() und sbrk() undefiniert. Alle anderen Funktionen können diese weiteren Speicherverwaltungsfunktionen problemlos verwenden.

brk() und sbrk() sind nicht reentrant.

Returnwert

brk():


0

bei Erfolg.


-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

 

sbrk():


vorheriger Speichergrenzwert



bei Erfolg.

 

(void*)-1

bei Fehler. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

brk() und sbrk() sind erfolglos und ändern den zugewiesenen Speicherplatz nicht, wenn gilt:


ENOMEM

Eine derartige Änderung würde dazu führen, dass mehr Speicherplatz zugewiesen wird, als durch die systembedingte maximale Prozessgröße zulässig ist (siehe ulimit() ).

Hinweise

Die Funktionen brk() und sbrk() wurden in speziellen Fällen benötigt, wo keine andere Speicherverwaltungsfunktion dieselben Möglichkeiten geboten hätte. Jetzt wird jedoch die Funktion mmap() empfohlen, da sie problemlos gleichzeitig mit allen anderen Speicherverwaltungsfunktionen eingesetzt werden kann.

Der Zeiger, der von sbrk() zurückgegeben wird, ist nicht für jede weitere Verwendung passend ausgerichtet.

Siehe auch

exec(), malloc(), mmap(), ulimit(), unistd.h.