Provided by: manpages-de-dev_4.21.0-2_all bug

BEZEICHNUNG

       alloca - Speicher reservieren, der automatisch freigegeben wird

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

Ü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 │
       └─────────────────────────────────────────────────────────────────────┴───────────────────────┴─────────┘

STANDARDS

       Diese Funktion ist nicht in POSIX.1 enthalten.

       alloca() stammt von PWB und 32V und erscheint in allen Ableitungen davon.

ANMERKUNGEN

       Die Funktion alloca() ist maschinen- und compilerabhängig. Da sie Speicher vom Stapel reserviert, ist sie
       schneller  als malloc(3) undfree(3). 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!

       Notwendigerweise  ist  alloca() im Compiler eingebaut, auch als __builtin_alloca() bekannt. Standardmäßig
       übersetzen moderne Compiler automatisch alle Verwendungen von alloca() in die eingebaute Version,  aller‐
       dings  ist  dies  verboten,  falls Standardkonformität erbeten wird (-ansi, -std=c*). In diesem Fall wird
       <alloca.h> benötigt, damit keine Symbolabhängigkeit ausgegeben wird.

       Die Tatsache, dass alloca() eine eingebaute Funktion 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.

       Felder variabler Länge (VLAs) sind Teil des C99-Standards, optional seit  C11  und  können  für  ähnliche
       Zwecke verwendet werden. Allerdings können sie nicht in Standard-C++ portiert werden und da sie Variablen
       sind, leben sie in ihrem blockbezogenen Geltungsbereich und haben keine Allocator-ähnliche Schnittstelle.
       Damit sind sie für die Implementierung von Funktionalitäten wie strdupa(3) ungeeignet.

FEHLER

       Aufgrund  der  Natur des Stapelspeichers ist es nicht möglich, zu prüfen, ob die Reservierung einen Über‐
       lauf beim verfügbaren Platz erzeugt. Daher wird dies weder angezeigt noch ist es ein Fehler.  (Allerdings
       ist  es wahrscheinlich, dass das Programm ein Signal SIGSEGV erhält, wenn es versucht, auf den nicht ver‐
       fügbaren Platz 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)

Ü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@hel‐
       gefjell.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  die
       Mailingliste der Übersetzer.

Linux man-pages 6.03                            15. Dezember 2022                                      alloca(3)