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,  allerdings 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  Überlauf  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 verfü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@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⟩.