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>.