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. 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 Ze wzgledu na nature stosu, nie da sie sprawdzic, czy alokacja przepelni dostepna przestrzen, stad nie ma zadnego powiadomienia o bledzie (jednakze program najprawdopodobniej otrzyma sygnal SIGSEGV, jesli sprobuje uzyskac dostep do niedostepnej przestrzeni). 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 Autorami polskiego tlumaczenia niniejszej strony podrecznika sa: 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.9.1 2 maja 2024 r. alloca(3)