[C ++] Memoria 4 áreas --- área de código, área global, área de pila, área de pila

cada blog, cada lema: Ilumina el mañana con el hoy.

0. Prefacio

Simplemente registre las cuatro áreas con c ++

1. Texto

Función: Los datos almacenados en diferentes áreas nos dan diferentes ciclos de vida, dándonos una mayor flexibilidad en la programación.

1.1 Antes de ejecutar el programa

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

1.1.1 Área de código

Almacene el código binario del cuerpo de la función , administrado por el sistema operativo

  • Almacenar las instrucciones de la máquina ejecutadas por la CPU
  • El área de código se comparte y el propósito de compartir es para los programas que se ejecutan con frecuencia, solo se necesita una copia del código en la memoria
  • El área de código es de solo lectura, la razón para que sea de solo lectura es para evitar modificar accidentalmente sus instrucciones

1.1.2 Área global

Almacenar variables globales y variables y constantes estáticas

  • Las variables globales y las variables estáticas se almacenan aquí
  • El área global también incluye el área constante , las constantes de cadena y otras constantes (constantes globales modificadas const) también se almacenan aquí
  • Los datos de esta área son liberados por el sistema operativo después de que finaliza el programa.
    Inserte la descripción de la imagen aquí

resumen:

  • El programa en C ++ se divide en área global y área de código antes de ejecutarse
  • Las funciones del área de código son compartidas y de solo lectura
  • El área global almacena variables globales, variables estáticas y constantes.
  • El área de constantes almacena constantes globales y constantes de cadena modificadas const.

1.2 Después de que se ejecuta el programa

1.2.1 Área de la pila

El compilador la asigna y libera automáticamente, 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 en el área de la pila

#include<iostream>
using namespace std;

int * func(int b) // 形参数据也会存放在栈区
{
    
    
	b = 100;
	int a = 10; // 局部变量存放在栈区,栈区数据在函数执行完成自动释放
	return &a; // 返回局部变量的地址
}


int main()
{
    
    
	// 接受func函数的返回值
	int *p = func(1);

	cout << *p << endl; // 第一次打印正确的数字,是因为编译器做了保留
	cout << *p << endl; // 第二次这个数据就不再保留了
	cout << *p << endl;
	cout << *p << endl;
	system("pause");
}

1.2.2 Área de la pila

Asignado por el programador, si el programador no lo libera, el sistema operativo lo reclamará cuando el programa finalice.
En C ++, new se usa principalmente para abrir memoria en el área del montón.
Inserte la descripción de la imagen aquí

#include<iostream>
using namespace std;

int * func()
{
    
    
	// 利用new关键字,可以将数据开辟到堆区

	 // 指针 本质是局部变量,放在栈上,指针保存的数据,存放在堆区
	int *p = new int(10); //

	return p;
}

int main()
{
    
    	
	int *point = func();
	cout << "函数返回值为:" << *point << endl;
	system("pause");
}

resumen:

  • El programador abre y libera los datos del área del montón
  • Los datos del área del montón utilizan la nueva palabra clave para abrir memoria

1.3 nuevo operador (adjunto)

  • Utilice el nuevo operador para abrir datos en el área del montón en C ++
  • El programador crea y libera manualmente los datos creados en el área del montón, utilizando el operador de uso eliminar
  • Sintaxis: nuevo tipo de datos
  • Los datos creados con new devolverán el tipo de puntero correspondiente a los datos
#include<iostream>
using namespace std;

// 1. new的基本语法
int *func()
{
    
    
	// 在堆区创建整型的数据
	// new返回的是该数据类型的指针
	int *p = new int(10);
	return p;

}

// 2. 在堆区利用new开辟数组
void test02()
{
    
    
	// 创建10整型的数据,在堆区
	int *arr = new int[10]; // 10代表数组个数有10个

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

	for (int i = 0; i < 10; i++)
	{
    
    
		cout << arr[i] << endl;
	}

	// 释放堆区的数组,释放数组,要加 [ ] 才可以
	delete[] arr;
}
void test01()
{
    
    
	int *p = func();
	cout << *p << endl;
	cout << *p << endl;
	// 堆区的数据,由程序员管理开辟,程序员管理释放
	// 如果想释放堆区的数据,利用关键字delete
	delete p;
	//cout << *p << endl; // 内存已经被释放,
}


int main()
{
    
    
	//test01();
	test02();

	system("pause");
}

Supongo que te gusta

Origin blog.csdn.net/weixin_39190382/article/details/108049471
Recomendado
Clasificación