_Alloca( ) (Rutina de biblioteca API)
Asigna un bloque de espacio en la pila para la rutina que realiza la llamada.
void FAR * _Alloca(unsigned int size)
unsigned int size; /* Size of stack space to allocate in
bytes. */
Observaciones
_Alloca( ) devuelve un puntero al bloque si el bloque se asigna con éxito o devuelve cero si no se asigna. _Alloca( ) libera automáticamente memoria cuando la rutina acaba, por lo que no es necesario que lo haga la correspondiente rutina.
Precaución Algunos compiladores de C, como MPW C, no admiten la asignación de memoria de la pila, por lo que las llamadas a _Alloca( ) desde esos compiladores darán resultados impredecibles. En su lugar, utilice variables locales o llamadas a _AllocHand( ) y _FreeHand( ) en el código para reservar memoria.
Para obtener más información acerca de cómo crear una biblioteca API e integrarla con Visual FoxPro, vea Acceso a la API de Visual FoxPro.
Ejemplo
El siguiente ejemplo duplica la acción de la función REPLICATE( ) de Visual FoxPro. La memoria utilizada temporalmente para duplicar el carácter proviene de _Alloca( ).
Código Visual FoxPro
SET LIBRARY TO ALLOCA
x = xREPLICATE("x", 120)
? x
? LEN(x)
Código C
#include <pro_ext.h>
void FAR allocaEx(ParamBlk FAR *parm)
{
char FAR *rep;
char c = *(char *) _HandToPtr(parm->p[0].val.ev_handle);
rep = _Alloca((int) parm->p[1].val.ev_long + 1);
_MemFill(rep, c, (int) parm->p[1].val.ev_long);
rep[parm->p[1].val.ev_long] = '\0'; // null terminate
_RetChar(rep);
}
FoxInfo myFoxInfo[] =
{
{"XREPLICATE", (FPFI) allocaEx, 2, "C,I"},
};
FoxTable _FoxTable =
{
(FoxTable FAR *) 0, sizeof(myFoxInfo)/sizeof(FoxInfo), myFoxInfo
};
Vea también
_AllocHand( ) (Rutina de biblioteca API) | _FreeHand( ) (Rutina de biblioteca API) | REPLICATE( ) (Función) | Acceso a la API de Visual FoxPro