Partición de memoria durante la operación del programa (nueva eliminación)

1. Modelo de partición de memoria

El programa C ++ divide la memoria en 4 áreas durante la operación

  • Área de código: almacena el código binario del cuerpo de la función, administrado por el sistema operativo
  • Área global: almacena variables globales y variables y constantes estáticas
  • Área de pila: asignada automáticamente por el compilador, almacenando valores de parámetros de función y variables locales, etc.
  • Área de montón: asignada y liberada por el programador, si no se libera, se liberará automáticamente después de que finalice el programa

El área global y el área de código existen antes de que se ejecute el programa, y ​​el área de pila y el área de pila solo existen después de que se ejecuta el programa.

Área de código

  • Almacenar las instrucciones de la máquina ejecutadas por la CPU
  • El área de código es compartida El propósito de compartir es tener una copia del código en la memoria para los programas que se ejecutan con frecuencia.
  • El área de código es de solo lectura , la razón para hacerla de solo lectura es evitar que el programa modifique accidentalmente sus instrucciones

Área global

  • Las variables globales y las variables estáticas se almacenan aquí.
  • El área global también contiene el área constante, y las constantes de cadena y otras constantes también se almacenan aquí.
  • El sistema operativo publica los datos de esta área una vez finalizado el programa.

Área de pila

  • Asignado y liberado automáticamente por el compilador, almacenando valores de parámetros de función, variables locales, etc.
  • Nota : No devuelva la dirección de la variable local, el compilador libera automáticamente los datos abiertos en el área de la pila

Área de montón

  • El programador abre y libera los datos del área del montón
  • Los datos del montón usan newpalabras clave para abrir memoria

Caso

#include <iostream>

using namespace std;

int main(int argc, char* agrv[])
{
    
    
	// 利用new关键在在堆区开辟一块内存,new 返回是指定类型的指针
	int* a = new int(10);

	printf("%d\n",*a);
	printf("%d\n", *a);
	printf("%d\n", *a);

	// 使用delete关键字释放
	delete a;
	// 将a指向null
	a = NULL;

	printf("%d\n",a);

	return 0;
}


Usar nuevo para crear datos

#include <iostream>

using namespace std;

int main(int argc, char* agrv[])
{
    
    
	// 中括号代表在堆内存中新建数组
	int* p = new int[10];

	int i;

	for (i = 0; i < 10; i++)
	{
    
    
		p[i] = i + 100;
	}

	for (i = 0; i < 10; i++)
	{
    
    
		printf("%d\n",*p);
		p++;
	}

	return 0;
}


La palabra clave eliminar libera memoria

Variable de lanzamiento

delete 变量名;

Matriz libre

delete[] 数组名;

Supongo que te gusta

Origin blog.csdn.net/qq_42418169/article/details/108852479
Recomendado
Clasificación