malloc ()-Bloque de almacenamiento de reserva de

Formato

#include <stdlib.h>
void *malloc(size_t size);

Nivel de idioma

ANSI

De hebra segura

Descripción

La función malloc() reserva un bloque de almacenamiento de tamaño bytes. A diferencia de la función calloc() , malloc() no inicializa todos los elementos en 0. El tamaño máximo para un malloc() no teraespacio es de 16711568 bytes.

Nota:
  1. Todo el almacenamiento dinámico está asociado con el grupo de activación de la función de llamada. Como tal, el almacenamiento debe asignarse, desasignarse y reasignarse dentro del mismo grupo de activación. No puede asignar almacenamiento dinámico dentro de un grupo de activación y desasignar o reasignar dicho almacenamiento de un grupo de activación diferente. Para obtener más información sobre los grupos de activación, consulte el manual Conceptos ILE .
  2. Para utilizar almacenamiento de teraespacio en lugar de almacenamiento de almacenamiento de nivel único sin cambiar el código fuente C, especifique el parámetro TERASPACE (*YES *TSIFC) en el mandato del compilador. Esto correlaciona la función de biblioteca malloc() con _C_TS_malloc(), su equivalente de almacenamiento de teraespacio. La cantidad máxima de almacenamiento de teraespacio que puede asignar cada llamada a _C_TS_malloc() es 2GB -224, o 2147483424 bytes. Si se necesitan más de 2147483408 bytes en una sola solicitud, llame a _C_TS_malloc64(unsigned long long int);.

    Para obtener más información, consulte el manual Conceptos ILE .

  3. Para las estadísticas actuales sobre el almacenamiento de teraespacio que utilizan los programas MI en un grupo de activación, llame a la función _C_TS_malloc_info . Esta función devuelve información que incluye el total de bytes, los bytes y bloques asignados, los bytes y bloques no asignados, los bytes solicitados, los bytes de relleno y los bytes de sobrecarga. Para obtener información más detallada sobre las estructuras de memoria utilizadas por las funciones _C_TS_malloc() y _C_TS_malloc64() , llame a la función _C_TS_malloc_debug() . Puede utilizar la información que devuelve esta función para identificar problemas de corrupción de memoria.
  4. Si el gestor de memoria de agrupación rápida se ha habilitado en el grupo de activación actual, el almacenamiento se recupera utilizando el gestor de memoria de agrupación rápida. Consulte _C_Quickpool_Init ()-Inicializar gestor de memoria de agrupación rápida para obtener más información.

Valor de retorno

La función malloc() devuelve un puntero al espacio reservado. El espacio de almacenamiento al que apunta el valor de retorno está adecuadamente alineado para el almacenamiento de cualquier tipo de objeto. El valor de retorno es NULL si no hay suficiente almacenamiento disponible, o si se ha especificado tamaño como cero.

Ejemplo

Este ejemplo solicita el número de entradas de matriz que desea y, a continuación, reserva espacio suficiente en el almacenamiento para las entradas. Si malloc() ha sido satisfactorio, el ejemplo asigna valores a las entradas e imprime cada entrada; de lo contrario, imprime un error.
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
  long * array;    /* start of the array */
  long * index;    /* index variable     */
  int    i;        /* index variable     */
  int  num;        /* number of entries of the array */
 
  printf( "Enter the size of the array\n" );
  scanf( "%i", &num );
 
  /* allocate num entries */
  if ( (index = array = (long *) malloc( num * sizeof( long ))) != NULL )
  {
 
    for ( i = 0; i < num; ++i )           /* put values in array    */
       *index++ = i;                      /* using pointer notation */
 
    for ( i = 0; i < num; ++i )           /* print the array out    */
      printf( "array[ %i ] = %i\n", i, array[i] );
  }
  else { /* malloc error */
    perror( "Out of storage" );
    abort();
  }
}
 
/********************  Output should be similar to:  **************
 
Enter the size of the array
array[ 0 ] = 0
array[ 1 ] = 1
array[ 2 ] = 2
array[ 3 ] = 3
array[ 4 ] = 4
*/

Información relacionada