alloca(3) Library Functions Manual alloca(3)

alloca - alocă memorie care este eliberată automat

Biblioteca C standard (libc, -lc)

#include <alloca.h>
void *alloca(size_t size);

Funcția alloca() alocă size octeți de spațiu în cadrul stivei apelantului. Acest spațiu temporar este eliberat automat când funcția care a numit alloca() returnează la apelantul său.

Funcția alloca() returnează un indicator la începutul spațiului alocat. Dacă alocarea cauzează depășirea stivei, comportamentul programului este nedefinit.

Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).

Interfață Atribut Valoare
alloca() Siguranța firelor MT-Safe

Niciunul.

PWB, 32V.

Funcția alloca() este dependentă de mașină și de compilator. Deoarece alocă din stivă, este mai rapidă decât malloc(3) și free(3). În anumite cazuri, poate simplifica și realocarea memoriei în aplicațiile care utilizează longjmp(3) sau siglongjmp(3). În caz contrar, utilizarea sa este descurajată.

Deoarece spațiul alocat de alloca() este alocat în cadrul stivei, acel spațiu este eliberat automat dacă funcția return este trecută printr-un apel către longjmp(3) sau siglongjmp(3).

Spațiul alocat de alloca() nu este eliberat automat dacă indicatorul care se referă la acesta iese pur și simplu din domeniul de aplicare.

Nu încercați să executați free(3) pentru a elibera spațiul alocat de alloca()!

Din necesitate, alloca() este un compilator încorporat, cunoscut și ca __builtin_alloca(). În mod implicit, compilatoarele moderne traduc automat toate utilizările lui alloca() în sistemul încorporat, dar acest lucru este interzis dacă se solicită conformitatea cu standardele (-ansi, -std=c*), în care caz <alloca.h> este necesar, ca să nu fie emisă o dependență de simbol.

Faptul că funcția alloca() este încorporată înseamnă că este imposibil să-i iei adresa sau să-i schimbi comportamentul prin conectarea cu o bibliotecă diferită.

Matricele de lungime variabilă (VLA) fac parte din standardul C99, opțional începând cu C11 și pot fi utilizate într-un scop similar. Cu toate acestea, ele nu sunt adaptate la standardul C++ și, fiind variabile, trăiesc în domeniul lor de bloc și nu au o interfață asemănătoare alocatorului, ceea ce le face inadecvate pentru implementarea funcționalității precum strdupa(3).

Din cauza naturii stivei, este imposibil să se verifice dacă alocarea ar depăși spațiul disponibil și, prin urmare, nici nu indică o eroare; (cu toate acestea, este probabil ca programul să primească un semnal SIGSEGV dacă încearcă să acceseze spațiul ce nu este disponibil).

Pe multe sisteme alloca() nu poate fi folosită în lista de argumente a unui apel de funcție, deoarece spațiul de stivă rezervat de alloca() ar apărea pe stiva din mijlocul spațiului pentru argumentele funcției.

brk(2), longjmp(3), malloc(3)

Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.

2 mai 2024 Pagini de manual de Linux 6.8