Provided by: manpages-de-dev_1.11-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.

       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  4.04  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 http://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>  und  Mario  Blättermann <mario.blaettermann@gmail.com>
       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>.