0

スレッドとプロセスのメモリアドレスに関する質問があります。質問は次のとおりです。-通常の通話では

int func(int a, int b){
    int c;
    c = a + b;
    return c;
}         

int main(){
    int ret = func(a,b);
     return 0;
}

上記の関数 func への関数呼び出しでは、関数変数 a と b がスタックに格納されます。私が間違っている場合は、私を修正してください。

もう 1 つの状況は、メイン プロセスからスレッドを作成する場合です。

void * func(void *dummy_ptr){
    int c;
    c = a + b;
    pthread_exit();
}         

int main(){
    pthread_t  id;
    int ret = pthread_create(&id, NULL, & func(), NULL);
    return 0;
}

私の質問は、pthread_create の変数が格納される場所です。メインのスタックまたはスレッドのスタックに格納されていますか。

4

2 に答える 2

1

pthread_createヒープ内の新しいスレッドのスタックにスペースを割り当てます。そのため、内部の変数funcは、プログラムのヒープにあるスレッドのスタックに格納されます。

于 2013-06-12T20:26:17.633 に答える
0

変数pthread_t idはメインに対してローカルであるため、メインのスタック上に作成する必要があります。

実行がmain終了すると、

  • pthread_join スレッドが終了するmainまで待つ必要はありません。
  • スレッドは切り離されていません。

main終了すると、他のすべてのスレッドが突然終了します (kill)。

于 2013-06-14T11:42:06.987 に答える