目次
プロセスが所有するスペース。
上位アドレスから下位アドレスへ:
可変型
ローカル定数、グローバル定数、グローバル変数、ローカル変数、ローカル静的変数、グローバル静的変数、ローカル一時変数、グローバル一時変数。
1.スタック
一時変数、関数パラメーター、ローカル定数。
2.ヒープ
動的に割り当てられた変数。(newまたはmallocによって割り当てられます。)
ヒープの効率はスタックよりも遅くなります。
3.静的ストレージ領域
グローバル静的変数、ローカル静的変数(関数の完了時に消えないようにするため)、グローバル変数。
4.一定の面積
グローバル定数。
5.コード領域
コードを保存します。
//main.cpp
int a = 0; //全局初始化区
char *p1; //全局未初始化区
int main()
{
int b; //栈区
char s[] = "abc"; //栈区
char *p2; //栈区
char *p3 = "123456"; //123456在常量区,指针p3在栈上。
static int c =0; //全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
//分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456");
//123456放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
}
マルチスレッドの場合、スレッドはどのリソースを所有しますか?
PCプログラムカウンタ、レジスタ、スタック、ステータスワード。
一部のリソースが排他的ではなく、スレッド操作エラーが発生する場合、そのリソースは各スレッドによって排他的に共有され、他のリソースはプロセス内のすべてのスレッドによって共有されます。
つまり、一般に、スレッドは別のスレッドのスタック上のデータにアクセスできません。