2021-01-26 Der sechste Tag, an dem C ++ eingetaktet und gelernt wird


Zum einen das Speicherpartitionsmodell

Wenn das C ++ - Programm ausgeführt wird, wird der Speicher im Allgemeinen in unterteilt4 Bereiche

  • Codebereich: Speichern Sie den Binärcode des Funktionskörpers, der vom Betriebssystem verwaltet wird

  • Globaler Bereich: Speichern Sie globale Variablen sowie statische Variablen und Konstanten

  • Stapelbereich: Wird vom Compiler automatisch zugewiesen und freigegeben, wobei Funktionsparameterwerte, lokale Variablen usw. gespeichert werden.

  • Heap-Bereich: Wird vom Programmierer zugewiesen und freigegeben. Wenn der Programmierer ihn nicht freigibt, wird er vom Betriebssystem am Ende des Programms zurückgefordert

== Die Bedeutung der vier Speicherbereiche: == In verschiedenen Bereichen gespeicherte Daten geben uns unterschiedliche Lebenszyklen und geben uns mehr Flexibilität bei der Programmierung

1. Bevor das Programm ausgeführt wird

Nach dem Kompilieren des Programms wird ein ausführbares exe-Programm generiert, das vor der Ausführung des Programms in zwei Bereiche unterteilt wird

Codebereich:

  • Speichert die von der CPU ausgeführten Maschinenbefehle

  • Der Codebereich istgeteiltJa, der Zweck der Freigabe besteht darin, dass Sie für häufig ausgeführte Programme nur eine Kopie des Codes im Speicher haben müssen

  • Der Codebereich istSchreibgeschütztJa, der Grund dafür, dass es schreibgeschützt ist, besteht darin, zu verhindern, dass das Programm versehentlich seine Anweisungen ändert

Globaler Bereich:

  • Globale VariablemitStatische VariableHier speichern

  • Der globale Bereich enthält auchKonstante FlächeHier werden auch String-Konstanten und andere Konstanten gespeichert

  • Funktionen: Die Daten in diesem Bereich werden vom Betriebssystem nach Programmende freigegeben

Globale Variablen und lokale Variablen sind in verschiedenen Speicherbereichen im Speicher verteilt

Globale Variablen sind Variablen, die nicht in Funktionen platziert sind

Statische Variable ist das Hinzufügen einer statischen vor einer normalen Variablen

Globale Variablen, statische Variablen, Zeichenfolgenkonstanten und globale Konstanten (const-modifizierte globale Konstanten) werden im globalen Bereich gespeichert

Lokale Variablen und lokale Konstanten (const-modifizierte lokale Variablen) befinden sich nicht im globalen Bereich

Beispiel

#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;

}

Ausgabeergebnis
Fügen Sie hier eine Bildbeschreibung ein

2. Nachdem das Programm ausgeführt wurde

Stapelbereich: Wird vom Compiler automatisch zugewiesen und freigegeben, wobei Funktionsparameterwerte, lokale Variablen usw. gespeichert werden.

(Hinweis: Geben Sie nicht die Adresse der lokalen Variablen zurück, da die im Stapelbereich geöffneten Daten automatisch vom Compiler freigegeben werden.)

Lokale Variablen, formale ParameterdatenIm Stapelbereich gespeichert, werden die Daten im Stapelbereich nach Ausführung der Funktion automatisch freigegeben

Heap-Bereich: Wird vom Programmierer zugewiesen und freigegeben. Wenn der Programmierer ihn nicht freigibt, wird er vom Betriebssystem zurückgefordert, wenn das Programm endet

Neuer Operator:
In C ++ wird new hauptsächlich zum Öffnen des Speichers im
Heap-Bereich verwendet. Die im Heap-Bereich geöffneten Daten werden vom Programmierer erstellt, manuell freigegeben und freigegeben. Verwenden Sie die Operator-Löschsyntax
: new 数据类型
Die von new erstellten Daten gibt den Typ zurück, der dem Datenzeiger entspricht

#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;

}

[Hinweis] Der Lernkurs ist Dark Horse Program C ++ Tutorial

Ich denke du magst

Origin blog.csdn.net/qq_42616280/article/details/113193140
Empfohlen
Rangfolge