0

私は次のようなクラスを持っています:

public class A
{
   int i;
 }

次のようにクラスのオブジェクトを作成しているとき:

 A obj=new A();

オブジェクトがヒープに割り当てられていることがわかります。これで、クラスは整数変数を取得しました。メンバー変数「i」が割り当てられている場所 (スタックまたはヒープ)?

4

3 に答える 3

1

iはフィールドであるため、インスタンス自体の一部です。インスタンスはヒープ上にあり、i...で構成さiれているため、ヒープ上にあります。

structインスタンス (値) はほぼどこにでもある可能性があるため、これは型にとってより興味深いものになりiます。あなたが言えるのは「インスタンス内」だけです。

于 2012-11-29T16:08:38.930 に答える
1

メンバー変数「i」が割り当てられている場所 (スタックまたはヒープ)?

それはヒープ上にあり、オブジェクトのメモリの一部です。(変数がオブジェクトのデータの一部として終わらない場合、オブジェクトのデータは何で構成されると予想されますか?)

もちろん、Eric Lippert が指摘するように、スタックは実装の詳細です (パート 1 ; [part two][2])。通常は、あまり気にする必要はありません。実際には、ローカル変数がヒープに割り当てられ始めるケースがますます増えています。

  • イテレータ ブロック
  • 無名関数のキャプチャ変数
  • 非同期メソッド

逆が真であるという証拠はあまり見たことがありませんが、将来の CLR ではエスケープ解析を使用して、特定のオブジェクトをヒープに割り当てる必要がなかったことを証明し、代わりにスタックに割り当てることが可能になるかもしれません。(一部の JVM はこれを行っていると思います。)

于 2012-11-29T16:08:55.380 に答える
0

すべてのクラス メンバーは、継続的なメモリ割り当てでヒープに入ります。メソッド内のすべての変数 (ローカル変数) はスタックに割り当てられます。

于 2013-10-01T15:20:58.817 に答える