プログラム操作中のメモリパーティション(新規削除)

1.メモリパーティションモデル

C ++プログラムは、操作中にメモリを4つの領域に分割します

  • コード領域:オペレーティングシステムによって管理される関数本体のバイナリコードを格納します
  • グローバル領域:グローバル変数と静的変数および定数を格納します
  • スタック領域:コンパイラによって自動的に割り当てられ、関数パラメータ値とローカル変数などが格納されます
  • ヒープ領域:プログラマーによって割り当てられて解放されます。解放されない場合は、プログラムの終了後に自動的に解放されます。

グローバル領域とコード領域はプログラムの実行前に存在し、スタック領域とヒープ領域はプログラムの実行後にのみ存在します。

コードエリア

  • CPUによって実行された機械命令を保存します
  • コード領域は共有されます。共有の目的は、頻繁に実行されるプログラムのメモリにコードのコピーを保持することです。
  • コード領域は読み取り専用です。読み取り専用にする理由は、プログラムが誤って命令を変更するのを防ぐためです。

グローバルエリア

  • グローバル変数と静的変数はここに保存されます。
  • グローバル領域には定数領域も含まれ、文字列定数やその他の定数もここに格納されます。
  • この領域のデータは、プログラムの終了後にオペレーティングシステムによって解放されます。

スタックエリア

  • コンパイラによって自動的に割り当ておよび解放され、関数パラメータ値、ローカル変数などが格納されます。
  • :ローカル変数のアドレスを返さないでください。スタック領域で開かれたデータは、コンパイラによって自動的に解放されます。

ヒープ領域

  • ヒープ領域データは、プログラマーによって開かれ、解放されます
  • ヒープデータはnewキーワードを使用してメモリを開きます

場合

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


newを使用してデータを作成する

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


deleteキーワードはメモリを解放します

リリース変数

delete 变量名;

フリーアレイ

delete[] 数组名;

おすすめ

転載: blog.csdn.net/qq_42418169/article/details/108852479