Provided by: manpages-de-dev_2.16-1_all bug

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.

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.

       ┌──────────────┬───────────────────────┬─────────┐
       │SchnittstelleAttributWert    │
       ├──────────────┼───────────────────────┼─────────┤
       │alloca()      │ Multithread-Fähigkeit │ MT-Safe │
       └──────────────┴───────────────────────┴─────────┘

KONFORM ZU

       Diese Funktion ist nicht in POSIX.1 enthalten.

       Es  ist  bekannt,  dass die Funktion alloca() in 32V, PWB, BWB.2, 3BSD und 4BSD erschienen
       ist. Es gibt unter 4.3BSD eine Handbuchseite 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.

       Der mittels alloca() reservierte Bereich wird nicht  automatisch  freigegeben,  falls  der
       Zeiger, der sich darauf bezieht, den Geltungsbereich verlässt.

       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 -std=c11 angegeben und der  Header
       <alloca.h>  nicht eingebunden ist. Andernfalls (ohne Option -ansi oder -std=c*) bindet die
       Glibc-Version von <stdlib.h> <alloca.h> ein und dieser Header enthält die Zeilen

           #ifdef  __GNUC__
           #define alloca(size)   __builtin_alloca (size)
           #endif

       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  5.03  des  Projekts  Linux-man-pages. Eine
       Beschreibung des Projekts, Informationen, wie Fehler  gemeldet  werden  können  sowie  die
       aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die  deutsche Übersetzung dieser Handbuchseite wurde von Ralf Demmer <rdemmer@rdemmer.de>,
       Chris Leick <c.leick@vollbio.de>,  Mario  Blättermann  <mario.blaettermann@gmail.com>  und
       Helge Kreutzmann <debian@helgefjell.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>.