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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   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⟩.