Provided by: manpages-pl-dev_0.7-1_all 

NAZWA
alloca - przydzielanie pamięci, która jest automatycznie zwalniana
SKŁADNIA
#include <alloca.h>
void *alloca(size_t rozmiar);
OPIS
Funkcja alloca() przydziela rozmiar bajtów pamięci na ramce stosu procedury, z której została wywołana.
Ta tymczasowa przestrzeń jest automatycznie zwalniana po powrocie funkcji, która wywołuje alloca() do
miejsca wywołania.
WARTOŚĆ ZWRACANA
Funkcja alloca() zwraca wskaźnik do początku przydzielonej pamięci. Gdy przydzielenie pamięci spowoduje
przepełnienie stosu, zachowanie programu nie jest określone.
ATRYBUTY
Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
┌───────────┬────────────────────────┬─────────┐
│ Interfejs │ Atrybut │ Wartość │
├───────────┼────────────────────────┼─────────┤
│ alloca() │ Bezpieczeństwo wątkowe │ MT-Safe │
└───────────┴────────────────────────┴─────────┘
ZGODNE Z
Funkcja nie występuje w POSIX.1.
Istnieją dowody, że funkcja alloca() występowała w 32V, PWB, PWB.2, 3BSD i 4BSD. W BSD 4.3 istnieje dla
niej strona podręcznika. Linux korzysta z wersji GNU.
UWAGI
Funkcja alloca() zależy od maszyny i kompilatora. W przypadku niektórych aplikacji jej użycie może
poprawić wydajność w porównaniu do użycia malloc(3) i free(3). W pewnych przypadkach może także uprościć
zwalnianie pamięci w aplikacjach, używających longjmp(3) lub siglongjmp(3). W pozostałych przypadkach
użycie tej funkcji nie jest zalecane.
Ponieważ przestrzeń alokowana przez alloca() jest przydzielana z przestrzeni stosu, to przestrzeń ta jest
automatycznie zwalniana, jeśli nastąpi przeskoczenie powrotu z funkcji przez wywołanie longjmp(3) lub
siglongjmp(3).
Pamięci przydzielonej przez alloca() nie można zwalniać za pomocą free(3)!
Uwagi dotyczące wersji GNU
Zwyczajowo gcc(1) zamienia wywołania alloca na kod wplatany (inlined). Nie będzie tego robił, gdy podana
zostanie jedna z opcji: -ansi, -std=c89, -std=c99 lub -std=c11 i nie jest dołączony plik nagłówkowy
<alloca.h>. W przeciwnym wypadku (bez opcji -ansi lub -std=c*) wersja glibc pliku <stdlib.h> dołącza plik
<alloca.h> zawierający następujące linie:
#ifdef __GNUC__
#define alloca(size) __builtin_alloca (size)
#endif
co ma niepożądane konsekwencje, gdy ma się własną wersję tej funkcji.
To, że kod tej funkcji jest wplatany, powoduje niemożliwość pobrania jej adresu, jak też niemożliwość
zmiany jej zachowania poprzez konsolidację z inną biblioteką,
Kod wplatany często składa się z pojedynczej instrukcji modyfikującej wskaźnik stosu, lecz nie
sprawdzającej jego przepełnienia. Zatem nigdy nie jest zwracana wartość NULL świadcząca o błędzie.
BŁĘDY
Nie ma żadnego powiadomienia w sytuacji, gdy nie można powiększyć przestrzeni stosu (Jednakże po
niepoprawnej alokacji, program najprawdopodobniej otrzyma sygnał SIGSEGV, jeśli spróbuje uzyskać dostęp
do niezaalokowanej przestrzeni).
W wielu systemach alloca() nie może być używana w obrębie listy argumentów w wywołaniu funkcji, gdyż
zarezerwowana przez alloca() przestrzeń stosu znalazłaby się w środku przestrzeni stosu przeznaczonej na
argumenty funkcji.
ZOBACZ TAKŻE
brk(2), longjmp(3), malloc(3)
O STRONIE
Angielska wersja tej strony pochodzi z wydania 4.07 projektu Linux man-pages. Opis projektu, informacje
dotyczące zgłaszania błędów oraz najnowszą wersję oryginału można znaleźć pod adresem
https://www.kernel.org/doc/man-pages/.
TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika man są: Adam Byrtek (PTM)
<abyrtek@priv.onet.pl>, Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>, Robert Luberda
<robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>.
Polskie tłumaczenie jest częścią projektu manpages-pl; uwagi, pomoc, zgłaszanie błędów na stronie
http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją 4.07 oryginału.
GNU 2015-03-02 ALLOCA(3)