malloc()

malloc(<longitud>)

Retorna:

El OFFSET del bloque de memoria solicitado, o 0 si la memoria disponible no es sufuciente.

Descripción:

Esta función asigna memoria dinámica, es decir, se solicita un nuevo bloque de memoria libre del ordenador para el programa.

Se requiere como parámetro la <longitud> del bloque de memoria que desea ocuparse. Esta longitud se especifica como un número de datos simples, ocupando cada uno de ellos 4 bytes; por ejemplo, si se solicita un bloque de longitud 100 se reservarán 400 bytes de memoria.

Dentro de un programa pueden solicitarse un máximo de 256 bloques, independientemente de su tamaño. La función free() permite liberar estos bloques de memoria.


Normalmente el OFFSET (dirección de memoria) retornado por la función malloc() se asigna a un dato de tipo puntero (ver POINTER).


Programa ejemplo:
PROGRAM ejemplo_malloc;

GLOBAL
    POINTER mitabla[1000];  // Puntero a una tabla de 1000 datos

BEGIN

    mitabla = malloc(1000); // Solicita 1000 posiciones de memoria

    FOR (contador=0;contador<1000;contador++) // Accede a los datos
        mitabla[contador]=-1;
    END

    free(mitabla);          // Libera la memoria ocupada por la tabla
END


Este pequeño ejemplo muestra como se puede definir un puntero a una tabla (con el puntero no se reserva espacio para los datos de la tabla), y como solicitar memoria para esta con la función malloc().

Una vez solicitada la memoria para la tabla de datos se accede a los mismos (se inicializan a -1, como un ejemplo), y se libera la memoria.

Los bloques de memoria que no se liberen con la función free(), serán liberados automáticamente por el sistema al finalizar el programa.


Nota: La cantidad de memoria disponible para los datos de los procesos del programa (datos locales y privados) se puede controlar mediante las opciones de compilación (ver Compiler_options).


Ver: free() - POINTER