0

変数があり、それに代入Nothing(またはNull) した場合、変数はどのくらいのメモリを占有するのでしょうか?

例えば

Dim i as Integer = Nothing

変数はメモリを使用しませんか? または整数のサイズ、4バイト?基本的には、値が割り当てられていないため、メモリのどこにも値がないため、メモリを必要としないことを意味すると思います。ただし、変数が何もないという情報が格納されているため、この情報はメモリを消費する必要がありますよね?.NET とネイティブ言語に違いはありますか? それとも値型と参照型の間ですか?

4

2 に答える 2

2

@Tim Schmelterがコメントで述べているように、値の割り当ては C#Nothingの VB.NET に相当します。default(T)

AnIntegerは常に 4 バイト、32 ビットを占有します。どの値を入れるかは問題ではありません。

ただし、参照がある場合、32 ビット プロセスでは 4 バイト、64 ビット プロセスでは 8 バイトを占めます。ただし、Integer、またはSystem.Int32は参照型ではありません。

Nothingここで「参照なし」を意味するのではなく (私が最初に考えたように)、型のデフォルト値を変数に割り当てているだけです。この場合、デフォルトIntegerは 0 です。

したがって、変数はSystem.Int32. あなたが持っているコードはそれに値を割り当てるだけです0

于 2014-05-07T09:57:33.013 に答える
1

一般的に言えば、Null への参照は、スタック上の参照自体のスペースのみを使用します。これは、64 ビット システムでは 8 バイトである必要があります。

あなたの特定のケースでは:ボックス化された値とボックス化されていない値の違いに注意してください!ボックス化された整数は、Integer クラスのインスタンスへの参照です。インスタンスは作成されていない (Nothing) ため、スペースは必要ありません。参照には 8 バイトが必要です。

ボックス化されていない値 (int) を使用していた場合、正確に 4 バイトの int (構造体) のスペースが必要になります。ここには参照が含まれていないことに注意してください。

Integer の特殊なケースではなく、「通常の」クラスを使用する方が簡単な例です。たとえば、

Object o = new Object()

oこれは、それ自体が空であっても、スタック上で 8 バイトを使用します。

于 2014-05-07T09:54:19.203 に答える