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
Debido a la naturaleza de la pila, es imposible comprobar si la asignación desbordaría el espacio disponible y, por lo tanto, ninguna de las dos indica un error. Es probable que el programa reciba una señal 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 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.