Provided by: manpages-pl-dev_0.7-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

       Informacje  o  pojęciach  używanych  w  tym  rozdziale   można   znaleźć   w   podręczniku
       attributes(7).

       ┌──────────┬────────────────────────┬─────────┐
       │InterfejsAtrybutWartość │
       ├──────────┼────────────────────────┼─────────┤
       │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.