alloca(3) Library Functions Manual alloca(3) NOMBRE alloca - asigna memoria que se libera automaticamente BIBLIOTECA Biblioteca Estandar C (libc, -lc) SINOPSIS #include void *alloca(size_t size); DESCRIPCION La funcion alloca() concede size bytes de espacio en el marco de pila (stack frame) del invocador. Este espacio temporal se libera automaticamente cuando la funcion que llamo a alloca() regresa a su invocador. VALOR DEVUELTO La funcion alloca() devuelve un puntero al comienzo del espacio concedido. Si la reserva provoca un desbordamiento de pila, el comportamiento del programa es indefinido. Esta funcion no se encuentra en POSIX ni SUSv3. ATRIBUTOS Para obtener una explicacion de los terminos usados en esta seccion, vease attributes(7). +-----------------------------+--------------------+-------------------+ |Interfaz | Atributo | Valor | +-----------------------------+--------------------+-------------------+ |alloca() | Seguridad del hilo | Multi-hilo seguro | +-----------------------------+--------------------+-------------------+ ESTANDARES Ninguno. HISTORIAL PWB, 32V. NOTAS La funcion alloca() dependera de la maquina y del compilador. Dado que asigna desde la pila, es mas rapido que malloc(3) y free(3). En ciertos casos, tambien puede simplificar la liberacion de memoria en aplicaciones que usan longjmp(3) o siglongjmp(3). De lo contrario, se desaconseja su uso. Dado que el espacio asignado por alloca() se asigna dentro del marco de la pila, dicho espacio se libera automaticamente si se salta el retorno de la funcion mediante una llamada a longjmp(3) o siglongjmp(3). El espacio asignado por alloca() no se libera automaticamente si el puntero que lo referencia simplemente sale del ambito. Se liberara automaticamente cuando la funcion que lo llama retorna. !No intente liberar (free(3) el espacio asignado por alloca()! Por necesidad, alloca() es una funcion interna del compilador, tambien conocida como __builtin_alloca(). Por defecto, los compiladores modernos traducen automaticamente todos los usos de alloca() a la funcion interna, pero esto no puede hacer si se solicita conformidad con estandares (-ansi, -std=c*), en cuyo caso se requiere para evitar que se emita una dependencia de simbolo. El hecho de que alloca() sea nativo, implica que es imposible tomar la direccion de esta funcion, o cambiar su comportamiento enlazandola con una biblioteca diferente. Los vectores de longitud variable (VLA por sus siglas en ingles) forman parte del estandar C99, son opcionales desde C11 y pueden utilizarse para un proposito similar. Sin embargo, no se adaptan al estandar C++ y, al ser variables, residen en su ambito de bloque y carecen de una interfaz similar a la de un asignador. Esto hace que sean inadecuadas para implementar funcionalidades como strdupa(3). ERRORES Debido a la naturaleza de la pila, es imposible comprobar si la asignacion desbordaria el espacio disponible y, por lo tanto, ninguna de las dos indica un error. Es probable que el programa reciba una senal SIGSEGV si intenta acceder a espacio no disponible. En muchos sistemas alloca() no puede ser utilizada dentro de la lista de argumentos de una llamada a funcion, porque el espacio de pila reservado por alloca() apareceria en mitad del espacio de pila para los argumentos de la funcion. VEASE TAMBIEN brk(2), longjmp(3), malloc(3) TRADUCCION La traduccion al espanol de esta pagina del manual fue creada por Sebastian Desimone , Gerardo Aburruzaga Garcia , Miguel Perez Ibars y Marcos Fouces Esta traduccion es documentacion libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. Si encuentra algun error en la traduccion de esta pagina del manual, envie un correo electronico a . Paginas de Manual de Linux 6.15 17 Mayo 2025 alloca(3)