Provided by: manpages-pl-dev_0.6-2_all bug

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

   Wielowątkowość (patrz pthreads(7))
       Funkcja alloca() jest wątkowo bezpieczna.

ZGODNE Z

       Funkcja nie występuje w POSIX.1-2001.

       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  3.71  projektu Linux man-pages. Opis
       projektu, informacje dotyczące zgłaszania błędów, oraz najnowszą  wersję  oryginału  można
       znaleźć pod adresem http://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ą    3.71
       oryginału.