NAZWA¶
alloca - alokacja pamięci
SKŁADNIA¶
#include <alloca.h>
void *alloca(size_t rozmiar);
OPIS¶
Uwaga! To tłumaczenie może być nieaktualne!
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óre
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.
ZGODNE Z¶
Istnieją dowody, że funkcja
alloca występowała w 32v,
pwb, pwb.2, 3bsd oraz 4bsd. W BSD 4.3 istnieje dla niej strona
podręcznika. Linux korzysta z wersji GNU. Funkcja ta nie występuje w
POSIX ani w SUSv3.
UWAGI DOTYCZĄCE WERSJI GNU¶
Normalnie,
gcc przekłada wywołania
alloca poprzez kod
wplatany (inlined). Nie będzie to czynione, gdy podana zostanie jedna z
opcji: -ansi lub -fno-builtin. Lecz należy być ostrożnym!
Domyślnie, zawarta w glibc wersja
<stdlib.h>
włącza
<alloca.h> zawierający wiersz
# define alloca(size) __builtin_alloca
(size)
z niepożądanymi konsekwencjami, jeśli ktoś posiada
własną wersję tej funkcji.
Fakt, ż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¶
Funkcja
alloca jest zależna od architektury i kompilatora. W wielu
systemach jej implementacja jest niepoprawna. Odradza się jej
używania.
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 przezstrzeni stosu przeznaczonej na argumenty funkcji.
ZOBACZ TAKŻE¶
brk(2),
pagesize(2),
calloc(3),
malloc(3),
realloc(3)
Powyższe tłumaczenie pochodzi z nieistniejącego już Projektu
Tłumaczenia Manuali i
może nie być aktualne. W razie
zauważenia różnic między powyższym opisem a
rzeczywistym zachowaniem opisywanego programu lub funkcji, prosimy o
zapoznanie się z oryginalną (angielską) wersją strony
podręcznika za pomocą polecenia:
- man --locale=C 3 alloca
Prosimy o pomoc w aktualizacji stron man - więcej informacji można
znaleźć pod adresem
http://sourceforge.net/projects/manpages-pl/.