alloca(3) Library Functions Manual alloca(3) NAZWA alloca - przydziela pamiec, ktora jest automatycznie zwalniana BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include void *alloca(size_t rozmiar); OPIS Funkcja alloca() przydziela rozmiar bajtow pamieci na ramce stosu procedury, z ktorej zostala wywolana. Ta tymczasowa przestrzen jest automatycznie zwalniana po powrocie funkcji, ktora wywoluje alloca() do miejsca wywolania. WARTOSC ZWRACANA Funkcja alloca() zwraca wskaznik do poczatku przydzielonej pamieci. Gdy przydzielenie pamieci spowoduje przepelnienie stosu, zachowanie programu nie jest okreslone. ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +---------------------------+--------------------------+---------------+ |Interfejs | Atrybut | Wartosc | +---------------------------+--------------------------+---------------+ |alloca() | Bezpieczenstwo watkowe | MT-bezpieczne | +---------------------------+--------------------------+---------------+ STANDARDY Brak. HISTORIA PWB, 32V. UWAGI Funkcja alloca() zalezy od maszyny i kompilatora. Alokacja zachodzi ze stosu, dlatego jest szybsza niz malloc(3) i free(3). W pewnych przypadkach moze takze uproscic zwalnianie pamieci w aplikacjach, uzywajacych longjmp(3) lub siglongjmp(3). W pozostalych przypadkach uzycie tej funkcji nie jest zalecane. Poniewaz przestrzen alokowana przez alloca() jest przydzielana z przestrzeni stosu, to przestrzen ta jest automatycznie zwalniana, jesli nastapi przeskoczenie powrotu z funkcji przez wywolanie longjmp(3) lub siglongjmp(3). Przestrzen zaalokowana przez alloca() nie jest automatycznie dealokowana, jesli wskaznik, ktory sie do niej odnosi, wychodzi poza zakres; jest automatycznie dealokowana, gdy funkcja wywolujaca powraca. Pamieci przydzielonej przez alloca() nie mozna zwalniac za pomoca free(3)! Z koniecznosci alloca() jest funkcja wbudowana kompilatora, znana rowniez jako __builtin_alloca(). Domyslnie, wspolczesne kompilatory automatycznie tlumacza wszystkie wystapienia alloca() na wbudowana, lecz jest to niedopuszczalne, jesli zazadano zgodnosci ze standardami (-ansi, -std=c*). W takim przypadku wymagane jest , aby wyemitowana byla zaleznosc symboliczna. To, ze alloca() jest wbudowana, powoduje niemozliwosc pobrania jej adresu, jak tez niemozliwosc zmiany jej zachowania poprzez konsolidacje z inna biblioteka, Tablice o zmiennym rozmiarze (ang. variable length array -- VLA) sa czescia standardu C99, opcjonalna od C11, i moga sluzyc podobnym celom. Nie portuja sie jednak do standardu C++ i, bedac zmiennymi, istnieja w swoim zasiegu blokowym i nie posiadaja interfejsu przypominajacego alokator, co czyni je nieodpowiednimi do implementowania funkcjonalnosci takich jak strdupa(3). USTERKI alloca() nie odpytuje systemu o dostepna pamiec stosu i nie korzysta z kopca, gdy brak dostepnej pamieci stosu. Z tego powodu nie moze wskazac bledu, jesli alokacja sie nie powiedzie. Jesli alokacja sie nie powiedzie, program prawdopodobnie otrzyma sygnal SIGSEGV. W wielu systemach alloca() nie moze byc uzywana w obrebie listy argumentow w wywolaniu funkcji, gdyz zarezerwowana przez alloca() przestrzen stosu znalazlaby sie w srodku przestrzeni stosu przeznaczonej na argumenty funkcji. ZOBACZ TAKZE brk(2), longjmp(3), malloc(3) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Adam Byrtek , Andrzej Krzysztofowicz , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.18 29 pazdziernika 2025 r. alloca(3)