NOMBRE¶
alloca - concede memoria
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.
NOTAS DE LA VERSIÓN GNU¶
Normalmente,
gcc traduce las llamadas a
alloca por código
inline. Ésto no es así cuando se especifica o bien la opción
-ansi o bien la opción -fno-builtin. Pero atención! Por defecto la
versión glibc de
<stdlib.h> incluye
<alloca.h>
y éste contiene la línea
# define alloca(size) __builtin_alloca
(size)
lo que puede provocar confusión si se dispone de una versión privada
de esta función.
El hecho de que el código sea inline, implica que es imposible tomar la
dirección de esta función, o cambiar su comportamiento
enlazándola con una biblioteca diferente.
El código inline consiste a menudo en una sola instrucción ajustando
el puntero de pila, y no comprueba un posible desbordamiento de pila. Por
tanto, no se devuelve un error NULL.
FALLOS¶
La función
alloca es dependiente de la máquina y del
compilador. En muchos sistemas su implementación es defectuosa. Su uso
está desaconsejado.
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.
HISTORIA¶
Hay evidencias de que la función
alloca apareció en 32v, pwb,
pwb.2, 3bsd, y 4bsd. Hay una página de manual para ella en BSD 4.3. Linux
usa la versión de GNU.
VÉASE TAMBIÉN¶
brk(2),
pagesize(2),
calloc(3),
malloc(3),
realloc(3)