"Fossies" - the Fresh Open Source Software archive 
Member "manpages-de-0.11/generated/man3/alloca.3" of archive manpages-de_0.11.orig.tar.gz:
Table of Contents
alloca - Speicher
reservieren, der automatisch freigegeben wird
#include <alloca.h>
void *alloca( size_t groesse);
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.
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.
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!
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.
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.
brk(2), longjmp(3), malloc(3)
Diese Seite ist Teil
der Veröffentlichung 3.35 des Projekts Linux-man-pages. Eine Beschreibung
des Projekts und Informationen, wie Fehler gemeldet werden können, finden
sich unter http://man7.org/linux/man-pages/.
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>.
Table of Contents