alloca(3) Library Functions Manual alloca(3) BEZEICHNUNG alloca - Speicher reservieren, der automatisch freigegeben wird BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include void *alloca(size_t Grosse); BESCHREIBUNG Die Funktion alloca() reserviert Grosse Byte auf im Stapelspeicher-Frame des Aufrufenden. Dieser temporare Bereich wird automatisch freigegeben, wenn die Funktion, die alloca() aufrief, zum Aufrufenden zuruckkehrt. RUCKGABEWERT Die Funktion alloca() gibt einen Zeiger auf den Anfang des reservierten Bereichs zuruck. Falls das Reservieren einen Uberlauf des Stapelspeichers verursachte, ist das Verhalten des Programms undefiniert. ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +--------------------------------+-------------------------+-----------+ |Schnittstelle | Attribut | Wert | +--------------------------------+-------------------------+-----------+ |alloca() | Multithread-Fahigkeit | MT-Sicher | +--------------------------------+-------------------------+-----------+ STANDARDS Keine. GESCHICHTE PWB, 32V. ANMERKUNGEN Die Funktion alloca() ist maschinen- und compilerabhangig. Da sie Speicher vom Stapel reserviert, ist sie schneller als malloc(3) undfree(3). In bestimmten Fallen kann sie ausserdem 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 Funktionsruckkehr durch den Aufruf von longjmp(3) oder siglongjmp(3) ubersprungen wird. Der mittels alloca() reservierte Bereich wird nicht automatisch freigegeben, falls der Zeiger, der sich darauf bezieht, den Geltungsbereich verlasst. Versuchen Sie nicht, mit free(3) Speicher freizugeben, der mit alloca() reserviert wurde! Notwendigerweise ist alloca() im Compiler eingebaut, auch als __builtin_alloca() bekannt. Standardmassig ubersetzen moderne Compiler automatisch alle Verwendungen von alloca() in die eingebaute Version, allerdings ist dies verboten, falls Standardkonformitat erbeten wird (-ansi, -std=c*). In diesem Fall wird benotigt, damit keine Symbolabhangigkeit ausgegeben wird. Die Tatsache, dass alloca() eine eingebaute Funktion ist, bedeutet, dass es unmoglich ist die Adresse dieser Funktion zu bekommen oder ihr Verhalten zu andern, indem mit einer anderen Bibliothek gelinkt wird. Felder variabler Lange (VLAs) sind Teil des C99-Standards, optional seit C11 und konnen fur ahnliche Zwecke verwendet werden. Allerdings konnen sie nicht in Standard-C++ portiert werden und da sie Variablen sind, leben sie in ihrem blockbezogenen Geltungsbereich und haben keine Allocator-ahnliche Schnittstelle. Damit sind sie fur die Implementierung von Funktionalitaten wie strdupa(3) ungeeignet. FEHLER Aufgrund der Natur des Stapelspeichers ist es nicht moglich, zu prufen, ob die Reservierung einen Uberlauf beim verfugbaren Platz erzeugt. Daher wird dies weder angezeigt noch ist es ein Fehler. (Allerdings ist es wahrscheinlich, dass das Programm ein Signal SIGSEGV erhalt, wenn es versucht, auf den nicht verfugbaren 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 fur die Funktionsarumente liegen wurde. SIEHE AUCH brk(2), longjmp(3), malloc(3) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Ralf Demmer , Chris Leick , Mario Blattermann und Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 alloca(3)