alloca(3)

NOMBRE
alloca - asigna memoria que se libera automáticamente

BIBLIOTECA
Biblioteca Estándar C (libc, -lc)

SINOPSIS
#include <alloca.h>

void *alloca(size_t size);

DESCRIPCIÓN
La función alloca() concede size bytes de espacio en el marco de pila (stack frame) del invocador. Este espacio temporal se libera automáticamente cuando la función que llamó a alloca() regresa a su invocador.

VALOR DEVUELTO
La función alloca() devuelve un puntero al comienzo del espacio concedido. Si la reserva provoca un desbordamiento de pila, el comportamiento del programa es indefinido. Esta función no se encuentra en POSIX ni SUSv3.

ATRIBUTOS
Para obtener una explicación de los términos usados en esta sección, véase attributes(7).
Interfaz | Atributo | Valor
alloca() | Seguridad del hilo | Multi-hilo seguro

ESTÁNDARES
Ninguno.

HISTORIAL
PWB, 32V.

NOTAS
La función alloca() dependerá de la máquina y del compilador. Dado que asigna desde la pila, es más rápido que malloc(3) y free(3). En ciertos casos, también puede simplificar la liberación 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 automáticamente si se salta el retorno de la función mediante una llamada a longjmp(3) o siglongjmp(3).

El espacio asignado por alloca() no se libera automáticamente si el puntero que lo referencia simplemente sale del ámbito. Se liberará automáticamente cuando la función que lo llama retorna.

¡No intente liberar (free(3) el espacio asignado por alloca()!

Por necesidad, alloca() es una función interna del compilador, también conocida como __builtin_alloca(). Por defecto, los compiladores modernos traducen automáticamente todos los usos de alloca() a la función interna, pero esto no puede hacer si se solicita conformidad con estándares (-ansi, -std=c*), en cuyo caso se requiere <alloca.h> para evitar que se emita una dependencia de símbolo.

El hecho de que alloca() sea nativo, implica que es imposible tomar la dirección de esta función, o cambiar su comportamiento enlazándola con una biblioteca diferente.

Los vectores de longitud variable (VLA por sus siglas en inglés) forman parte del estándar C99, son opcionales desde C11 y pueden utilizarse para un propósito similar. Sin embargo, no se adaptan al estándar C++ y, al ser variables, residen en su ámbito 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
alloca() does not query the system for available stack memory, and does not fall back to using heap if stack storage is unavailable. It therefore cannot indicate an error if the allocation fails. If the allocation fails, the program is likely to receive a SIGSEGV signal.

En muchos sistemas alloca() no puede ser utilizada dentro de la lista de argumentos de una llamada a función, porque el espacio de pila reservado por alloca() aparecería en mitad del espacio de pila para los argumentos de la función.

VÉASE TAMBIÉN
brk(2), longjmp(3), malloc(3)

TRADUCCIÓN
La traducción al español de esta página del manual fue creada por Sebastian Desimone <chipy@argenet.com.ar>, Gerardo Aburruzaga García <gerardo.aburruzaga@uca.es>, Miguel Pérez Ibars <mpi79470@alu.um.es> y Marcos Fouces <marcos@debian.org>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.