malloc, free, realloc, calloc, mallopt, mallinfo, mallinfo_heap, alloca, valloc o posix_memalign Subroutine

Finalidad

Proporciona un conjunto completo de herramientas de asignación de memoria, reasignación, desasignación y gestión de almacenamiento dinámico.

Bibliotecas

Berkeley Compatibility Library (libbsd.a)

Biblioteca C estándar (libc.a)

API de subsistema Malloc

malloc

Sintaxis (malloc)

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

Descripción (malloc)

La subrutina malloc devuelve un puntero a un bloque de memoria de al menos el número de bytes especificado por el parámetro Tamaño . El bloque está alineado para que se pueda utilizar para cualquier tipo de datos. Los resultados no definidos se producen si el espacio asignado por la subrutina malloc se ha desbordado.

Parámetros (malloc)

Elemento Descripción
Tamaño Especifica el tamaño, en bytes, de la memoria que se va a asignar.

Valores de retorno (malloc)

Cuando se completa correctamente, la subrutina malloc devuelve un puntero al espacio alineado adecuadamente para el almacenamiento de cualquier tipo de objeto. Si el tamaño solicitado es 0, malloc devuelve NULL en circunstancias normales. Sin embargo, si el programa se ha compilado con la macro _LINUX_SOURCE_COMPAT definida, malloc devuelve un puntero válido a un espacio de tamaño 0.

Si la solicitud no se puede satisfacer por algún motivo, la subrutina malloc devuelve NULL.

Códigos de error (malloc)

Elemento Descripción
ENOMEM No hay suficiente espacio de almacenamiento disponible para dar servicio a la solicitud.

free

Sintaxis (libre)

#include <stdlib.h>
void free (Pointer)
void * Pointer;

Descripción (libre)

La subrutina free desasigna un bloque de memoria asignado anteriormente por el subsistema malloc . Los resultados no definidos se producen si el parámetro Puntero no es una dirección asignada anteriormente por el subsistema malloc , o si el parámetro Puntero ya se ha desasignado. Si el parámetro Puntero es NULL, no se produce ninguna acción.

Parámetros (libre)

Elemento Descripción
Puntero Especifica un puntero al espacio asignado anteriormente por el subsistema malloc .

Valores de retorno (libres)

La subrutina free no devuelve un valor. Cuando se completa correctamente con argumentos distintos de cero, la subrutina realloc devuelve un puntero al espacio asignado (posiblemente movido). Si el parámetro Tamaño es 0 y el parámetro Puntero no es nulo, no se produce ninguna acción.

Códigos de error (libres)

La subrutina free no establece errno.

realloc (libre)

Sintaxis (realloc)

#include <stdlib.h>
void *realloc (Pointer, Size)
void *Pointer;
size_t Size;

Descripción (reasignación)

La subrutina realloc cambia el tamaño del objeto de memoria al que apunta el parámetro Puntero por el número de bytes especificado por el parámetro Tamaño . El Puntero debe apuntar a una dirección devuelta por una rutina de asignación de subsistema malloc y no debe haberse desasignado previamente. Los resultados no definidos se producen si Puntero no cumple estos criterios.

El contenido del objeto de memoria permanece sin cambios hasta el menor de los tamaños antiguo y nuevo. Si el objeto de memoria actual no se puede ampliar para satisfacer la solicitud, la subrutina realloc adquiere un nuevo objeto de memoria y copia los datos existentes en el nuevo espacio. A continuación, se libera el objeto de memoria antiguo. Si no se puede adquirir ningún objeto de memoria para acomodar la solicitud, el objeto permanece sin cambios.

Si el parámetro Puntero es nulo, la subrutina realloc es equivalente a una subrutina malloc del mismo tamaño.

Si el parámetro Tamaño es 0 y el parámetro Puntero no es nulo, la subrutina realloc es equivalente a una subrutina free del mismo tamaño.

Parámetros (realloc)

Elemento Descripción
Puntero Especifica un Puntero para el espacio asignado anteriormente por el subsistema malloc .
Tamaño Especifica el nuevo tamaño, en bytes, del objeto de memoria.

Valores de retorno (reasignación)

Cuando se completa correctamente con argumentos distintos de cero, la subrutina realloc devuelve un puntero al espacio asignado (posiblemente movido). Si el parámetro Tamaño es 0 y el parámetro Puntero no es nulo, el comportamiento de retorno es equivalente al de la subrutina free . Si el parámetro Puntero es nulo y el parámetro Tamaño no es cero, el comportamiento de retorno es equivalente al de la subrutina malloc .

Códigos de error (reasignación)

Elemento Descripción
ENOMEM No hay suficiente espacio de almacenamiento disponible para dar servicio a la solicitud.

calloc

Sintaxis (calloc)

#include <stdlib.h>
void *calloc (NumberOfElements, ElementSize)
size_t NumberOfElements;
size_t ElementSize;

Descripción (calloc)

La subrutina calloc asigna espacio para un array que contiene los objetos NumberOfElements. El parámetro ElementSize especifica el tamaño de cada elemento en bytes. Una vez asignada la matriz, todos los bits se inicializan en 0.

El orden y la contigüidad de almacenamiento asignados por llamadas sucesivas a la subrutina calloc no se han especificado. El puntero ha devuelto puntos a la primera dirección de byte (más baja) del espacio asignado. El espacio asignado se alinea para que se pueda utilizar para cualquier tipo de datos. Los resultados no definidos se producen si el espacio asignado por la subrutina calloc se ha desbordado.

Parámetros (calloc)

Elemento Descripción
NumberOfElements Especifica el número de elementos de la matriz.
ElementSize Especifica el tamaño, en bytes, de cada elemento de la matriz.

Valores de retorno (calloc)

Al finalizar correctamente, la subrutina calloc devuelve un puntero a la matriz asignada de inicialización cero. Si el tamaño solicitado es 0, la subrutina calloc devuelve NULL en circunstancias normales. Sin embargo, si el programa se ha compilado con la macro _LINUX_SOURCE_COMPAT definida, la subrutina calloc devuelve un puntero válido a un espacio de tamaño 0.

Si la solicitud no se puede satisfacer por algún motivo, la subrutina calloc devuelve NULL.

Códigos de error (calloc)

Elemento Descripción
ENOMEM No hay suficiente espacio de almacenamiento disponible para dar servicio a la solicitud.

mallopt

Sintaxis (mallopt)

#include <malloc.h>
#include <stdlib.h>
int mallopt (Command, Value)
int Command;
int Value;

Descripción (mallopt)

La subrutina mallopt se proporciona para la compatibilidad a nivel de origen con la subrutina malloc de System V. La subrutina mallopt da soporte a los mandatos siguientes:
Tabla 1. Mandatos y efectos
Mandato Valor Efecto
MXFAST 0 Si se llama antes que cualquier otra subrutina del subsistema malloc , esto habilita la política de asignación predeterminada para el proceso.
MXFAST 1 Si se llama antes que cualquier otra subrutina del subsistema malloc , esto habilita la política de asignación 3.1 para el proceso.
M_DISCLAIM 0 Si se llama mientras el asignador predeterminado está habilitado, se descarta toda la memoria libre del almacenamiento dinámico de proceso.
MMALIGN N Si se llama en tiempo de ejecución, establece la alineación de asignación de malloc predeterminada en el valor N. El valor N debe ser una potencia de 2 (mayor o igual que el tamaño de un puntero).

Parámetros (mallopt)

Elemento Descripción
Mandato Especifica el mandato mallopt que se va a ejecutar.
VALOR Especifica el tamaño de cada elemento de la matriz.

Valores de retorno (mallopt)

Cuando se completa correctamente, la subrutina mallopt devuelve 0. De lo contrario, se devuelve 1. Si se solicita una alineación no válida (que no es una potencia de 2), mallopt falla con un valor de retorno de 1, aunque las llamadas posteriores a malloc no se ven afectadas y continúan proporcionando el valor de alineación desde antes de la llamada mallopt anómala.

Códigos de error (mallopt)

La subrutina mallopt no establece errno.

mallinfo

Sintaxis (mallinfo)

#include <malloc.h>
#include <stdlib.h>
struct mallinfo mallinfo();

Descripción (mallinfo)

La subrutina mallinfo se puede utilizar para obtener información sobre el almacenamiento dinámico gestionado por el subsistema malloc .

Valores de retorno (mallinfo)

La subrutina mallinfo devuelve una estructura de tipo struct mallinfo, rellenada con información relevante y estadísticas sobre el almacenamiento dinámico. El contenido de esta estructura se puede interpretar utilizando la definición de struct mallinfo en el archivo /usr/include/malloc.h .

Códigos de error (mallinfo)

La subrutina mallinfo no establece errno.

almacenamiento dinámico mallinfo_heap

Sintaxis (mallinfo_heap)

#include <malloc.h>
#include <stdlib.h>
struct mallinfo_heap mallinfo_heap (Heap)
int Heap;

Descripción (mallinfo_heap)

En un contexto de varios almacenamientos dinámicos, la subrutina mallinfo_heap se puede utilizar para obtener información sobre un almacenamiento dinámico específico gestionado por el subsistema malloc .

Parámetros (mallinfo_heap)

Elemento Descripción
Almacenamiento intermedio Especifica qué almacenamiento dinámico consultar.

Valores de retorno (mallinfo_heap)

mallinfo_heap devuelve una estructura de tipo struct mallinfo_heap, rellenada con información relevante y estadísticas sobre el almacenamiento dinámico. El contenido de esta estructura se puede interpretar utilizando la definición de struct mallinfo_heap en el archivo /usr/include/malloc.h .

Códigos de error (mallinfo_heap)

La subrutina mallinfo_heap no establece errno.

Alloca

Sintaxis (alloca)

#include <stdlib.h>
char *alloca (Size)
int Size;

Descripción (alloca)

La subrutina alloca devuelve un puntero a un bloque de memoria de al menos el número de bytes especificado por el parámetro Tamaño . El espacio se asigna desde el marco de pila del llamante y se libera automáticamente cuando se devuelve la subrutina de llamada.

Si la subrutina alloca se utiliza en el código compilado con el compilador IBM® XL C for AIX® , se debe añadir #pragma alloca al código fuente antes de hacer referencia a la subrutina alloca . De forma alternativa, puede añadir el distintivo de compilador -ma o el archivo de cabecera <alloca.h> .

Parámetros (alloca)

Elemento Descripción
Tamaño Especifica el tamaño, en bytes, de la memoria que se va a asignar.

Valores de retorno (alloca)

La subrutina alloca devuelve un puntero a un espacio del tamaño solicitado.

Códigos de error (alloca)

La subrutina alloca no establece errno.

valloc

Sintaxis (valloc)

#include <stdlib.h>
void *valloc (Size)
size_t Size;

Descripción (valloc)

La subrutina valloc está soportada como interfaz de compatibilidad en Berkeley Compatibility Library (libbsd.a), así como en libc.a. La subrutina valloc tiene el mismo efecto que malloc, excepto que la memoria asignada se alinea con un múltiplo del valor devuelto por sysconf (_ SC_PAGESIZE).

Parámetros (valloc)

Elemento Descripción
Tamaño Especifica el tamaño, en bytes, de la memoria que se va a asignar.

Valores de retorno (valloc)

Tras una finalización satisfactoria, la subrutina valloc devuelve un puntero a un objeto de memoria que tiene Tamaño bytes de longitud, alineados con un límite de página. Los resultados no definidos se producen si el espacio asignado por la subrutina valloc se ha desbordado.

Si la solicitud no se puede satisfacer por alguna razón, valloc devuelve NULL.

Códigos de error (valloc)

Elemento Descripción
ENOMEM No hay suficiente espacio de almacenamiento disponible para dar servicio a la solicitud.

posix_memalign

Sintaxis (posix_memalign)

#include <stdlib.h>
int posix_memalign(void **Pointer2Pointer, Align, Size)
void ** Pointer2Pointer;
size_t Align;
size_t Size;

Descripción (posix_memalign)

La subrutina posix_memalign asigna Tamaño bytes de memoria alineados en un límite especificado por Alinear. La dirección de esta memoria se almacena en Pointer2Pointer.

Parámetros (posix_memalign)

Elemento Descripción
Pointer2Pointer Especifica la ubicación en la que se debe copiar la dirección.
Alineación Especifica la alineación de la memoria asignada, en bytes. El parámetro Alinear debe ser un múltiplo de potencia de dos del tamaño de un puntero.
Tamaño Especifica el tamaño, en bytes, de la memoria que se va a asignar.

Valores de retorno (posix_memalign)

Al finalizar correctamente, posix_memalign devuelve 0. De lo contrario, se devuelve un número de error para indicar el error.

Códigos de error (posix_memalign)

Elemento Descripción
EINVAL El valor de Alinear no es una potencia de dos múltiplo del tamaño de un puntero.
ENOMEM No hay suficiente espacio de almacenamiento disponible para dar servicio a la solicitud.