7

私の推測では、クラス変数( "class var")は、ストレージ内で真にグローバルです(つまり、アプリケーション全体の1つのインスタンス)。

しかし、これが当てはまるのか、それともそれらがストレージ内のスレッドであるのか(たとえば、「threadvar」に似ているのか)、スレッドごとに1つのインスタンスであるのかどうか疑問に思っています。

誰か知ってる?

編集:これは実際には正しい用語であり、私が求めているものであるため、「スコープ」を「ストレージ」に変更しました(バリーに感謝)

4

3 に答える 3

11

クラス変数は、メンバーの可視性属性に従ってスコープが設定され、スレッド ストレージではなくグローバル ストレージを持ちます。

スコープは構文上の概念であり、どの識別子がどこから見えるかに関連しています。ここで問題になるのは、変数のストレージです。

于 2008-09-17T13:14:52.253 に答える
8

はい、クラス変数はグローバルスコープです。threadvarsの実装方法の詳細については、RTLソースを参照してください。Win32では、各スレッドは、スレッドの作成時に自動的に割り当てられるメモリのブロックを持つことができます。この追加のデータ領域は、threadvarsを格納するために使用されるものです。

于 2008-09-17T11:23:32.070 に答える
1

クラス変数はクラスと同じです。アプリケーションに対してグローバルで一意です。

于 2008-09-18T00:43:19.870 に答える