alloca(3)

NUME
alloca - alocă memorie care este eliberată automat

BIBLIOTECA
Biblioteca C standard (libc, -lc)

SINOPSIS
#include <alloca.h>

void *alloca(size_t size);

DESCRIERE
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.

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

ATRIBUTE
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

STANDARDE
Niciunul.

ISTORIC
PWB, 32V.

NOTE
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 în cazul în care indicatorul care se referă la acesta iese pur și simplu din domeniul de aplicare; acesta este eliberat automat atunci când funcția apelantă revine.

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).

ERORI
alloca() nu interoghează sistemul pentru memoria stivă disponibilă și nu recurge la utilizarea grămezii dacă stocarea stivei nu este disponibilă. Prin urmare, nu poate indica o eroare dacă alocarea eșuează. Dacă alocarea eșuează, programul va primi probabil un semnal SIGSEGV.

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.

CONSULTAȚI ȘI
brk(2), longjmp(3), malloc(3)

TRADUCERE
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 (https://www.gnu.org/licenses/gpl-3.0.html) 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.