# # C ++ funciones de asignación de memoria de base: malloc, calloc, realloc, _alloca, nuevo, libre, de eliminación

malloc :

void *malloc(size_t size);
  • Función: la longitud del espacio en el tamaño de la aplicación montón bytes de bloque contiguo de memoria.
  • Parámetros: tamaño - las aplicaciones espaciales longitud tamaño en bytes
  • Valor de retorno: Si los puntos de distribución de éxito se asignan puntero de memoria (valor inicial no está definido en este área de almacenamiento) que se devuelve es el primer espacio de direcciones de la aplicación, de lo contrario, devuelve un puntero nulo nulo. Cuando ya no se utiliza la memoria, se debe utilizar la función free () para liberar los bloques de memoria. La función devuelve un puntero debe alinearse correctamente, de modo que pueda ser utilizado por cualquier objeto de datos.
  • Nota: void * denotan tipo indeterminado de puntero, por ejemplo más claro se refiere al tiempo de espacio de memoria aplicación no saber qué tipo de datos que el usuario está utilizando este espacio para almacenar (como un char o int o ...)
  • mecanismo de trabajo: en esencia refleja la función malloc, que tiene un bloque de memoria disponible está conectado a una larga lista de llamada gratis lista . Cuando se llama a la función malloc, en el que la tabla de conexión para encontrar un bloque de memoria lo suficientemente grande como para satisfacer la petición del usuario se requiere. A continuación, el bloque de memoria se divide en dos (igual al tamaño de un tamaño solicitado por el usuario, la otra es el tamaño de los bytes restantes). A continuación, se le asignará al usuario que la memoria aprobada para el usuario, y la pieza restante (si lo hay) para volver a la tabla de enlaces. Call libre de función, el usuario liberará los bloques de memoria están conectados a la cadena libre. En el extremo, la cadena de inactividad será cortado en muchos pequeños fragmentos de la memoria, si el usuario a continuación, aplicar para un gran segmento de la memoria, entonces el fragmento de cadena de ralentí no puede cumplir los requisitos del usuario. Por lo tanto, malloc solicitud función de retardo, y comienza a comprobar cada uno de los segmentos de memoria hurgando en el tramo vacío, especie ellos, los pequeños bloques libres adyacentes en un bloque más grande de memoria. Si no hay un bloque de memoria para cumplir con los requisitos, la función malloc devuelve un NULL puntero , por lo que cuando el bloque de memoria aplicación dinámica llamada malloc, la determinación debe devolver el valor.

calloc :

void *calloc(unsigned n,unsigned size);
  • Función: el bloque contiguo aplicación montón num de la memoria, el número de bytes de memoria para cada tamaño, y el byte se establece en 0 se inicializa, la aplicación devuelve el valor de la primera espacio de direcciones, matriz de aplicación más conveniente, pero ratio de eficiencia puede malloc () será más lento, porque la inicialización de múltiples pasos
  • Parámetros: n- - bloques contiguos de memoria, tamaño - el número de bytes por bloque de memoria
  • Valor de retorno: Si los puntos de distribución de éxito se asignan puntero de memoria (valor inicial no está definido en este área de almacenamiento) que se devuelve es el primer espacio de direcciones de la aplicación, de lo contrario, devuelve un puntero nulo nulo. Cuando ya no se utiliza la memoria, se debe utilizar la función free () para liberar los bloques de memoria. La función devuelve un puntero debe alinearse correctamente, de modo que pueda ser utilizado por cualquier objeto de datos.
  • Nota: void * denotan tipo indeterminado de puntero, por ejemplo más claro se refiere al tiempo de espacio de memoria aplicación no saber qué tipo de datos que el usuario está utilizando este espacio para almacenar (como un char o int o ...)

realloc :

void* realloc(void* memblock, size_t size);
  • Función: el puntero para determinar en primer lugar si en la actualidad existe suficiente espacio contiguo, en su caso, para ampliar los puntos de dirección memblock y memblock cambio, si el espacio no es suficiente, de acuerdo con el tamaño de la asignación de espacio designado tamaño, los datos originales se copia en el principio hasta el fin área de memoria recién asignada, a continuación, suelte el memblock original se refería área de memoria, y devuelve la primera dirección del área de memoria recién asignada. Es decir Reasignar direcciones de los bloques de memoria.
  • Parámetros: membloc - puntero de bloque de memoria actual,  tamaño - Especifica ampliado
  • Valor de retorno: Si los puntos de distribución de éxito se asignan puntero de memoria (valor inicial no está definido en este área de almacenamiento) que se devuelve es el primer espacio de direcciones de la aplicación, de lo contrario, devuelve un puntero nulo nulo. Cuando ya no se utiliza la memoria, se debe utilizar la función free () para liberar los bloques de memoria. La función devuelve un puntero debe alinearse correctamente, de modo que pueda ser utilizado por cualquier objeto de datos.
  • Nota: void * denotan tipo indeterminado de puntero, por ejemplo más claro se refiere al tiempo de espacio de memoria aplicación no saber qué tipo de datos que el usuario está utilizando este espacio para almacenar (como un char o int o ...)

 

 _alloca:

void * __cdecl alloca(size_t);

La función de memoria de la asignación, y malloc, calloc, realloc similar, pero tenga en cuenta una diferencia importante, _alloca es solicitar espacio en la pila (stack), se queda en libertad de inmediato.

Al llamar alloca devuelve la función (), y le será asignada automáticamente la memoria se libera. Es decir, la memoria asignada por alloca local, en cierta medida, una función de `` marco de pila "o .alloca contexto () no tiene la portabilidad, y difícil de implementar en una máquina sin una pila convencional cuando se trata el valor de retorno puede causar problemas cuando se pasa directamente a otra función.

 fgets(alloca(100), 100, stdin)

Por estas razones, alloca () deficiente, no aptos para su uso, no importa lo útil que puede ser en una amplia gama de programas portables en el mismo. Desde C99 soporta matrices de longitud variable (VLA), que puede usarse para cumplir mejor alloca () antes de la tarea. Desaprobados

 

nuevo nuevo[]

  • Función: la longitud del espacio en la pila de aplicación para el tipo de corriente (corriente de tipo * array) de bloques de bytes de memoria contiguas.
  • Parámetros: void
  • Valor de retorno: Si los puntos de distribución de éxito se asignan puntero de memoria (valor inicial no está definido en este área de almacenamiento) que se devuelve es el primer espacio de direcciones de la aplicación, de lo contrario, devuelve un puntero nulo nulo. Cuando ya no se utiliza la memoria, se debe utilizar la función de borrado de borrado [] liberará el bloque de memoria.
  • Nota: nuevos objetos serán automáticamente llamar al constructor.

 

gratis

void free(void *ptr)
  • Función: bloques de memoria de liberación.
  • Parámetros: PTR - puntero a un bloque de memoria para cancelar la asignación, el bloque de memoria se lleva a cabo antes de la asignación de memoria llamando a malloc, realloc calloc o de. Si el parámetro pasado es un puntero nulo, entonces no se toma ninguna acción.
  • Valor de retorno: void
  • Nota: libre () no liberar espacio en la zona de pila, pila espacio es administrado por el sistema operativo, aplicación y liberación por el sistema operativo. Después de liberar el espacio en blanco puntero es necesario, para evitar convertirse en una guía de campo

eliminar / delete []

  • Función: bloques de memoria de liberación.
  • Valor de retorno: void
  • Nota: el uso de objetos de borrado serán automáticamente llamar al destructor, una matriz de objetos debe utilizar un delete [] para ser puesto en libertad, los tipos básicos de matrices espaciales pueden eliminar / borrar [] para ser puesto en libertad. El borrado no puede ir a liberar espacio en el área de pila, pila espacio es administrado por el sistema operativo, aplicación y liberación por el sistema operativo. Después de liberar el espacio en blanco puntero es necesario, para evitar convertirse en una guía de campo
Publicados 170 artículos originales · ganado elogios 207 · Vistas 4,59 millones +

Supongo que te gusta

Origin blog.csdn.net/xiaoting451292510/article/details/105094625
Recomendado
Clasificación