BEZEICHNUNG¶
alloca - Speicher reservieren, der automatisch freigegeben wird
ÜBERSICHT¶
#include <alloca.h>
void *alloca( size_t groesse);
BESCHREIBUNG¶
Die Funktion
alloca() reserviert
groesse Byte auf dem
Stapelspeicher des Aufrufenden. Dieser temporäre Bereich wird automatisch
freigegeben, wenn die Funktion, die
alloca() aufrief, zum Aufrufenden
zurückkehrt.
RÜCKGABEWERT¶
Die Funktion
alloca() gibt einen Zeiger auf den Anfang des reservierten
Bereichs zurück. Falls das Reservieren einen Überlauf des
Stapelspeichers verursachte, ist das Verhalten des Programms undefiniert.
Diese Funktion ist nicht in POSIX.1-2001 enthalten.
Es ist bekannt, dass die Funktion
alloca() in 32V, PWB, BWB.2, 3BSD und
4BSD erschienen ist. Es gibt unter 4.3BSD eine Manpage dafür. Linux
verwendet die GNU-Version.
ANMERKUNGEN¶
Die Funktion
alloca() ist maschinen- und compilerabhängig. Für
bestimmte Anwendungen kann ihre Benutzung die Leistungsfähigkeit im
Vergleich zu
malloc(3) plus
free(3) erhöhen. In bestimmten
Fällen kann sie außerdem das Freigeben von Speicher in Anwendungen
vereinfachen, die
longjmp(3) oder
siglongjmp(3) benutzen.
Andernfalls wird von ihrem Gebrauch abgeraten.
Da der durch
alloca() reservierte Bereich innerhalb des Stapelspeichers
liegt, wird dieser Bereich automatisch freigegeben, wenn die
Funktionsrückkehr durch den Aufruf von
longjmp(3) oder
siglongjmp(3) übersprungen wird.
Versuchen Sie nicht mit
free(3) Speicher freizugeben, der mit
alloca() reserviert wurde!
Bemerkungen zur GNU-Version¶
Normalerweise übersetzt
gcc(1) Aufrufe von
alloca() mit
»Inlined-Code«. Dies ist nicht so, wenn entweder die Option
-ansi,
-std=c89,
-std=c99 oder
-fno-builtin
angegeben ist (und der Header
<alloca.h> nicht eingebunden ist).
Aber vorsicht! Standardmäßig bindet die Glibc-Version von
<stdlib.h> <alloca.h> ein und dieser Header
enthält die Zeile
#define alloca(groesse) __builtin_alloca (groesse)
mit chaotischen Konsequenzen, wenn jemand eine private Version dieser Funktion
hat.
Die Tatsache, dass der Code inlined ist, bedeutet, dass es unmöglich ist
die Adresse dieser Funktion zu bekommen oder ihr Verhalten zu ändern,
indem mit einer anderen Bibliothek gelinkt wird.
Der »Inlined-Code« besteht oft aus einer einzelnen Anweisung zum
Anpassen des Stapelspeicher-Zeigers und prüft nicht, ob ein
Stapelspeicher-Überlauf auftritt. Daher gibt es dort keine
NULL-Fehler-Rückkehr.
FEHLER¶
Es gibt keine Fehleranzeige, wenn der Stapelspeicher nicht erweitert werden
kann. (Das Programm wird jedoch wahrscheinlich nach einer fehlgeschlagenen
Reservierung ein
SIGSEGV-Signal empfangen, wenn es versucht auf den
nicht reservierten Speicher zuzugreifen.)
Auf vielen Systemen kann
alloca() nicht innerhalb der Argumenteliste der
aufrufenden Funktion benutzt werden, weil der durch
alloca()
reservierte Bereich des Stapelspeichers in der Mitte des Bereichs für die
Funktionsarumente liegen würde.
SIEHE AUCH¶
brk(2),
longjmp(3),
malloc(3)
KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.42 des Projekts Linux-
man-pages. Eine Beschreibung des Projekts und Informationen, wie Fehler
gemeldet werden können, finden sich unter
http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Ralf Demmer
<rdemmer@rdemmer.de> und Chris Leick <c.leick@vollbio.de>
erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public
License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird
KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken
Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.