C ++メモリ空間の分散

プロセスが所有するスペース。
上位アドレスから下位アドレスへ:
ここに画像の説明を挿入します

可変型

ローカル定数、グローバル定数、グローバル変数、ローカル変数、ローカル静的変数、グローバル静的変数、ローカル一時変数、グローバル一時変数。

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プログラムカウンタ、レジスタ、スタック、ステータスワード。
一部のリソースが排他的ではなく、スレッド操作エラーが発生する場合、そのリソースは各スレッドによって排他的に共有され、他のリソースはプロセス内のすべてのスレッドによって共有されます。
つまり、一般に、スレッドは別のスレッドのスタック上のデータにアクセスできません。

おすすめ

転載: blog.csdn.net/weixin_45146520/article/details/114396504