VS メモリ プロファイラーはbyte
、クラスにフィールドを追加すると、アプリケーションの開始時に追加のメモリを必要としないことを教えてくれますが、それがint
orの場合object
は、インスタンスごとに追加の 4 バイトが必要です。
他のタイプはありますか、または値が割り当てられる前にメモリを消費しない独自のタイプを作成できますか? また、値が再び null (ゼロ) になると、メモリは解放されますか?
VS メモリ プロファイラーはbyte
、クラスにフィールドを追加すると、アプリケーションの開始時に追加のメモリを必要としないことを教えてくれますが、それがint
orの場合object
は、インスタンスごとに追加の 4 バイトが必要です。
他のタイプはありますか、または値が割り当てられる前にメモリを消費しない独自のタイプを作成できますか? また、値が再び null (ゼロ) になると、メモリは解放されますか?
32 ビット プラットフォームのメモリは、通常、4 バイトの割り当て単位で割り当てられます。.NET ランタイムがまさにそれを行っていると思います。
C# コンパイラは、クラス/構造体の割り当てサイズが最小になるレイアウトを使用します (注釈を使用してそうでないことを示す場合を除きます。たとえば、interop を使用してメモリを異なるレイアウトのアンマネージ コードと通信する場合など)。つまり、
宣言されたすべての変数は、スタックまたはヒープのいずれかでメモリを占有します。
考えられる例外の 1 つは、使用中のハードウェアの適切なレジスタに収まるローカル変数です。その場合、特定のコンテキストでは、オプティマイザーと JIT コンパイラーは(「可能性」を強調して) スタック フレームにスペースを割り当てるのではなく、レジスターに割り当てることを選択する場合があります。
ありません。おそらく、オブジェクトがなければならない最小サイズがあり、バイトは最小に収まるほど小さいです。