Asignar y desasignar la memoria en C++

Muhammad Adil 11 diciembre 2023
  1. Asignar y desasignar la memoria utilizando los operadores nuevo y eliminar
  2. Asignar y desasignar la memoria usando la biblioteca estándar de C
  3. Beneficios de la asignación de memoria dinámica con la biblioteca estándar
Asignar y desasignar la memoria en C++

El compilador controla automáticamente la memoria asignada a las variables en otros lenguajes de programación como Java y Python. Pero en C++, este no es el caso.

Desde su creación, la asignación y desasignación de memoria han sido parte integral del lenguaje C++. Es responsable de administrar la memoria dinámica en el programa, lo que incluye la asignación de memoria para usarla durante la ejecución del programa, liberar la memoria asignada cuando ya no se necesita y determinar qué sucede con la memoria asignada cuando finaliza el programa.

La asignación y desasignación de memoria son administradas por el administrador de memoria virtual del sistema operativo, que utiliza una técnica de paginación.

El lenguaje de programación C++ proporciona varias funciones para asignar y liberar memoria. Estas funciones incluyen malloc, calloc, realloc, free, new y delete.

Comencemos con los operadores nuevo y eliminar.

Asignar y desasignar la memoria utilizando los operadores nuevo y eliminar

el nuevo Operador

El operador nuevo asigna la memoria para un objeto de un tipo específico. Primero, crea un nuevo objeto en la memoria, que luego se puede inicializar con valores.

Si no se especifica ningún valor, se utiliza el constructor predeterminado para inicializar el objeto. La sintaxis del operador nuevo es:

pointer - variable = new data - type

En este caso se utiliza el puntero de tipo tipo de datos. Cualquier tipo de datos incorporado, incluidas las matrices, o cualquier tipo de datos definido por el usuario, incluidas la estructura y la clase, podría usarse como tipo de datos.

¿Qué pasa si no hay suficiente memoria disponible durante la ejecución del programa?

Si no hay suficiente memoria en un montón para asignar, la nueva solicitud falla al generar un mensaje de error de tipo std::bad alloc; sin embargo, si se usa nothrow con el operador nuevo, en qué escenario devuelve un puntero NULL. Como resultado, es esencial buscar la variable puntero de la nueva antes de ejecutar su programa.

el operador eliminar

El operador eliminar libera o desasigna la memoria asignada por el operador nuevo. La sintaxis del operador eliminar es la siguiente:

delete pArray;

Aquí, pArray se refiere a una matriz asignada con el operador nuevo.

Normalmente, el operador eliminar realiza dos funciones:

  • Primero, destruye el objeto invocando a su destructor.
  • Desasigna la memoria.

Ejemplo Usando los operadores nuevo y eliminar:

#include <iostream>
using namespace std;

int main() {
  int* x;
  x = new int;
  *x = 34;
  cout << *x << endl;
  delete x;
  return 0;
}

En este ejemplo, en primer lugar, asignamos la memoria usando el operador nuevo, luego la desasignamos usando el operador eliminar.

Haga clic aquí para verificar el funcionamiento del código como se mencionó anteriormente.

Asignar y desasignar la memoria usando la biblioteca estándar de C

Utilizando malloc(), free() y realloc(), la biblioteca estándar de C facilita la asignación y desasignación de memoria. Estas funciones están disponibles en el lenguaje C++.

la función malloc()

malloc() es una función en el lenguaje de programación C++ que asigna un espacio de memoria contiguo del tamaño especificado. Se utiliza para asignar memoria dinámica para variables, matrices y otras estructuras de datos.

La función malloc() toma tres argumentos:

  1. El primer argumento especifica el número de bytes a asignar.
  2. El segundo argumento especifica el tipo de datos a asignar.
  3. El tercer argumento es una dirección donde almacenar los datos asignados.

la función libre()

La función free() en C++ libera o desasigna una región de memoria que se asignó previamente mediante el operador malloc(). Devuelve esta región de memoria al sistema para que pueda reutilizarse más tarde.

la función realloc()

realloc() es una función que puede cambiar el tamaño de un bloque de memoria. Se utiliza para cambiar el tamaño de una asignación, normalmente para aumentarla cuando se ha agotado.

realloc() toma tres parámetros: un puntero a la asignación anterior, información a la nueva asignación y un nuevo tamaño para la nueva asignación.

El antiguo puntero apunta al bloque de memoria asignado original antes de la reasignación, y la nueva información significa la memoria recién asignada después de la reasignación. El nuevo tamaño especifica cuánto espacio debe asignarse para este bloque estableciendo su longitud en bytes o el número de elementos si no se proporciona este parámetro.

Beneficios de la asignación de memoria dinámica con la biblioteca estándar

La biblioteca proporciona varios tipos de funciones para administrar la memoria dinámica, tales como:

  1. Asignar y liberar bloques de memoria en el montón;
  2. Copia de datos entre bloques de memoria asignada;
  3. Acceder al tamaño de un bloque de memoria asignado en tiempo de ejecución;
  4. Comprobar si un bloque de memoria asignada está vacío; y
  5. Liberar todos los bloques en un montón a la vez.
Muhammad Adil avatar Muhammad Adil avatar

Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.

Facebook

Artículo relacionado - C++ Memory