コードメモリは主に4つのセクションに分かれています
- コードエリア
- グローバルエリア
- スタックエリア
- ヒープ領域
コード領域とグローバル領域は実行前であり、スタック領域とヒープ領域は実行後です。つまり、exeファイルが実行されていない場合、スタック領域とヒープ領域はありません。
1.コード領域
つまり、exeファイルをプログラミングした後のコード
特徴:
- 唯一
プログラムを一度実行することは不可能なので、すべてのコードを再度コピーして、コード領域のコピーは1つだけにします。
- 守秘義務
プログラムがexeファイルになった後は、exeファイルのソースコードを確認しないでください。
2.グローバルエリア
- グローバル変数
- 静的変数
- 定数(グローバル変数のみがグローバル領域であることに注意してください)
定数に注意が必要な理由は、ローカル定数は変更できないように見えますが、アドレスへのポインタで変更できるため、ローカル定数を変更できるため、ローカル定数のアドレスがグローバル領域にないためです。
コードを直接見てください:
#include<iostream>
using namespace std;
int a = 10;
int aa = 20;
const int d = 10;
const int dd = 20;
int main()
{
int b = 10;
int bb = 20;
static int c = 10;
static int cc = 20;
const int e = 10;
const int ee = 20;
cout << "全局变量 " << int(&a) << endl;
cout << "全局变量 " << int(&aa) << endl << endl;
cout << "局部变量 " << int(&b) << endl;
cout << "局部变量 " << int(&bb) << endl << endl;
cout << "静态变量 " << int(&c) << endl;
cout << "静态变量 " << int(&cc) << endl << endl;
cout << "全局常量 " << int(&d) << endl;
cout << "全局常量 " << int(&dd) << endl << endl;
cout << "局部常量 " << int(&e) << endl;
cout << "局部常量 " << int(&ee) << endl;
system("pause");
return 0;
}
ローカル定数とローカル変数のアドレスが比較的近いのに対し、他の3つは比較的近いことがわかります。
3.スタック領域
特徴:
- 自動アプリケーション、自動リリース、コンパイラ管理
主にローカルパラメータ、関数内のパラメータがあります
4.ヒープ領域
- 手動アプリケーション、手動リリース、プログラマー管理
- リリースしない場合、コンパイラがリリースします
主に新しいオブジェクト