Provided by: manpages-pl-dev_4.23.1-1_all bug

NAZWA

       alloca - przydziela pamięć, która jest automatycznie zwalniana

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

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-bezpieczne │
       └──────────────────────────────────────────────────────────────┴────────────────────────┴───────────────┘

STANDARDY

       Brak.

HISTORIA

       PWB, 32V.

UWAGI

       Funkcja alloca() zależy od maszyny i kompilatora. Alokacja zachodzi ze stosu, dlatego  jest  szybsza  niż
       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).

       Przestrzeń zaalokowana przez alloca() nie jest automatycznie dealokowana, jeśli wskaźnik,  który  się  do
       niej odnosi wychodzi poza zakres.

       Pamięci przydzielonej przez alloca() nie można zwalniać za pomocą free(3)!

       Z  konieczności  alloca()  jest  funkcją  wbudowaną  kompilatora,  znaną również jako __builtin_alloca().
       Domyślnie, współczesne kompilatory automatycznie tłumaczą wszystkie wystąpienia  alloca()  na  wbudowaną,
       lecz jest to niedopuszczalne, jeśli zażądano zgodności ze standardami (-ansi, -std=c*). W takim przypadku
       wymagane jest <alloca.h>, aby wyemitowana była zależność symboliczna.

       To,  że  alloca()  jest wbudowana, powoduje niemożliwość pobrania jej adresu, jak też niemożliwość zmiany
       jej zachowania poprzez konsolidację z inną biblioteką,

       Tablice o zmiennym rozmiarze (ang. variable length array — VLA) są częścią standardu C99,  opcjonalną  od
       C11, i mogą służyć podobnym celom. Nie portują się jednak do standardu C++ i, będąc zmiennymi, istnieją w
       swoim  zasięgu blokowym i nie posiadają interfejsu przypominającego alokator, co czyni je nieodpowiednimi
       do implementowania funkcjonalności takich jak strdupa(3).

USTERKI

       Ze względu na naturę stosu, nie da się sprawdzić, czy alokacja przepełni dostępną przestrzeń, stąd nie ma
       żadnego powiadomienia o błędzie  (jednakże  program  najprawdopodobniej  otrzyma  sygnał  SIGSEGV,  jeśli
       spróbuje uzyskać dostęp do niedostępnej 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)

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.

Linux man-pages 6.8                              2 maja 2024 r.                                        alloca(3)