Provided by: manpages-pl-dev_4.13-4_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).

       The space allocated by alloca()  is not automatically deallocated if the pointer that refers to it simply
       goes out of scope.

       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 5.10 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 są: Adam Byrtek <alpha@irc.pl>, Andrzej
       Krzysztofowicz  <ankry@green.mf.pg.gda.pl>,  Robert   Luberda   <robert@debian.org>   i   Michał   Kułach
       <michal.kulach@gmail.com>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją.  Bliższe informacje o warunkach licencji można uzyskać
       zapoznając  się  z  GNU General Public License w wersji 3  lub  nowszej.   Nie   przyjmuje   się   ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej manpages-pl-
       list@lists.sourceforge.net.

GNU                                              6 marca 2019 r.                                       ALLOCA(3)