alloca

ALLOCA(3)                   Linux-Programmierhandbuch                  ALLOCA(3)



BEZEICHNUNG
       alloca - Speicher reservieren, der automatisch freigegeben wird

ÜBERSICHT
       #include <alloca.h>

       void *alloca(size_t Größe);

BESCHREIBUNG
       Die Funktion alloca() reserviert Größe Byte auf im Stapelspeicher-Frame
       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.

       ┌──────────────────────────────────────┬───────────────────────┬─────────┐
       │Schnittstelle                         Attribut              Wert    │
       ├──────────────────────────────────────┼───────────────────────┼─────────┤
       │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
       Stapelspeicher-Frames 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-Frame 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.11 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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ 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 die Mailingliste der Übersetzer ⟨debian-l10n-
       german@lists.debian.org⟩.



GNU                               22. März 2021                        ALLOCA(3)