2009-11-10 7 views
8

マルチスレッドプロセスでスレッド間で共有されるプログラム状態のコンポーネントはどれですか?マルチスレッドプロセスでスレッド間で共有されるプログラム状態のコンポーネントはどれですか?

  • 登録が
  • ヒープメモリ
  • グローバル変数
  • スタックメモリ

私の提案値。グローバル変数、グローバル変数のみがヒープに割り当てられますか?ヒープメモリとグローバル変数。これは正しいです?

答えて

14

常にヒープメモリ。

グローバル変数はプラットフォームによって異なりますが、通常は共有されます。

スタックはレジスタと同様にスレッド固有です。

+0

linuxで共有しますか? – Algific

+0

@data_jeppはい、Linux上で共有されています。スレッドローカルのグローバル変数を使用する場合は、pthread_ *関数を使用してスレッドローカルストレージを割り当てることができます。 –

1

言語とスレッドの実装によって異なります。たとえば、Cでも、CPUのレジスタに直接アクセスできるとは考えていないので、pthreadsの共有レジスタ(レコードの場合、私はそうではないと確信しています)を問わず、むしろ疑問です。 Cでは、グローバル変数は実際にではなく、実際にはヒープ上に割り当てられていますが、他の言語でも構いませんが、です。

スタックはより複雑です。 C/pthreadsでは、各スレッドは独自のスタックを持っていますが、他の言語やスレッドモデルでは、基本スタックモデルがそれほど単純ではないため、状況はもっと複雑になります。

+0

Cでインラインアセンブリを使用してレジスタにアクセスすることはできますが、 "Portable Assembly"という名前が失われ始めます。 – NVRAM

0

スタック:なし

レジスタ:なし

ヒープ:はい(あなたがyまたはn、真の答えを選択する必要があれば、それが依存している)

グローバル:はい

0

グローバル値とヒープメモリは、マルチスレッドプロセス全体で共有されます。レジスタ値とスタックメモリは、各スレッドに専用です。

関連する問題