alloca(3)

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.
Schnittstelle | Attribut | Wert
alloca() | Multithread-Fähigkeit | MT-Safe

STANDARDS
Keine.

GESCHICHTE
PWB, 32V.

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).