alloca(3) | Library Functions Manual | alloca(3) |
alloca - Speicher reservieren, der automatisch freigegeben wird
Standard-C-Bibliothek (libc, -lc)
#include <alloca.h>
void *alloca(size_t Größe);
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.
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.
Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
Schnittstelle | Attribut | Wert |
alloca() | Multithread-Fähigkeit | MT-Safe |
Diese Funktion ist nicht in POSIX.1 enthalten.
alloca() stammt von PWB und 32V und erscheint in allen Ableitungen davon.
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.
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.
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 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.
15. Dezember 2022 | Linux man-pages 6.03 |