jammy (3) alloca.3.gz

Provided by: manpages-de-dev_4.13-4_all bug

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.

       ┌──────────────┬───────────────────────┬─────────┐
       │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 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.10  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⟩.