2021-01-26 El sexto día de registro y aprendizaje de C ++


Uno, el modelo de partición de memoria

Cuando se ejecuta el programa C ++, la memoria generalmente se divide en4 áreas

  • Á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 y liberada automáticamente por el compilador, almacenando valores de parámetros de función, variables locales, etc.

  • Área de montón: asignada y liberada por el programador, si el programador no libera, el sistema operativo la reclamará al final del programa

== El significado de las cuatro áreas de memoria: == Los datos almacenados en diferentes áreas nos dan diferentes ciclos de vida, lo que nos da una mayor flexibilidad en la programación

1. Antes de que se ejecute el programa

Una vez compilado el programa, se genera un programa ejecutable exe, que se divide en dos áreas antes de que se ejecute el programa.

Área de código:

  • Almacena las instrucciones de la máquina ejecutadas por la CPU

  • El área de código escompartidoSí, el propósito de compartir es que para los programas que se ejecutan con frecuencia, solo necesita tener una copia del código en la memoria

  • El área de código esSolo lecturaSí, la razón para hacerlo de solo lectura es evitar que el programa modifique accidentalmente sus instrucciones

Área global:

  • Variable globalconVariable estáticaAlmacenar aquí

  • El área global también contieneÁrea constante, Las constantes de cadena y otras constantes también se almacenan aquí

  • Características: el sistema operativo publica los datos de esta área después de que finaliza el programa

Las variables globales y las variables locales se distribuyen en diferentes áreas de memoria en la memoria.

Las variables globales son variables que no se colocan en funciones.

La variable estática es agregar estática antes de la variable ordinaria

Las variables globales, variables estáticas, constantes de cadena, constantes globales (constantes globales modificadas const) se almacenan en el área global

Las variables locales y las constantes locales (variables locales modificadas const) no están en el área global

Ejemplo

#include<iostream>
using namespace std;

//全局变量
int g_a = 10;
int g_b = 20;

//全局常量
const int c_g_a = 10;
const int c_g_b = 20;

int main()
{
    
    
	//局部变量
	int a = 10;
	int b = 20;
	cout << "局部变量a的存放地址" << (int)&a << endl;
	cout << "局部变量b的存放地址" << (int)&b << endl;

	//局部常量
	const int c_a = 10;
	const int c_b = 20;
	cout << "局部常量c_a的存放地址" << (int)&c_a << endl;
	cout << "局部变量c_b的存放地址" << (int)&c_b << endl;

	//全局变量
	cout << "全局变量g_a的存放地址" << (int)&g_a << endl;
	cout << "全局变量g_b的存放地址" << (int)&g_b << endl;

	//全局常量
	cout << "全局常量c_g_a的存放地址" << (int)&c_g_a << endl;
	cout << "全局常量c_g_b的存放地址" << (int)&c_g_b << endl;



	//静态变量
	static int s_a = 10;
	static int s_b = 20;
	cout << "静态变量s_a的存放地址" << (int)&s_a << endl;
	cout << "静态变量s_b的存放地址" << (int)&s_b << endl;

	//字符串常量
	cout << "字符串常量的存放地址" << (int) &"hello world" << endl;



	system("pause");
	return 0;

}

Resultado de salida
Inserte la descripción de la imagen aquí

2. Después de que se ejecute el programa

Área de pila: asignada y liberada 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, los datos abiertos en el área de la pila serán liberados automáticamente por el compilador)

Variables locales, datos de parámetros formalesAlmacenado en el área de la pila, los datos en el área de la pila se liberan automáticamente después de que se ejecuta la función

Área de montón: asignada y liberada por el programador, si el programador no la libera, el sistema operativo la reclamará cuando finalice el programa

Operador nuevo:
En C ++, new se usa principalmente para abrir memoria en el
área del montón. Los datos abiertos en el área del montón son creados por el programador, liberados y liberados manualmente. Utilice la
sintaxis de eliminación del operador : new 数据类型
los datos creados por new devolverá el tipo correspondiente al puntero de datos

#include<iostream>
using namespace std;

int *func()
{
    
    
	int * p = new int(10);
	return p;
}

void test01()
{
    
    
	int * p = func();
	cout << *p << endl;
	cout << *p << endl;
	//堆区的数据不会自动释放,需要程序员操作
	//如果想释放堆区的数据,利用关键字delete
	delete p;
}

void test02()
{
    
    
	//在堆区创建整型数据的数组,含有10个元素
	int *arr = new int[10];

	//释放数组
	delete[] arr;
}

int main()
{
    
    
	test01();
	
	system("pause");
	return 0;

}

[Nota] El curso de aprendizaje es-Tutorial de C ++ del Programa Dark Horse

Supongo que te gusta

Origin blog.csdn.net/qq_42616280/article/details/113193140
Recomendado
Clasificación