Directorio de artículos
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
new
palabras 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[] 数组名;