可能性の重複:C#のValueTypeの配列がヒープまたはスタックに移動しますか?
:int[] array = new int[512];
(C#) Arrays, heap and stack and value types
私はC#でのメモリ割り当ての間にいくつかの違いを勉強しようとしています
だが、私はこの命令を持っていると仮定してみよう
「配列」はヒープ?または、Stackに512の整数を予約していますか?
可能性の重複:C#のValueTypeの配列がヒープまたはスタックに移動しますか?
:int[] array = new int[512];
(C#) Arrays, heap and stack and value types
私はC#でのメモリ割り当ての間にいくつかの違いを勉強しようとしています
だが、私はこの命令を持っていると仮定してみよう
「配列」はヒープ?または、Stackに512の整数を予約していますか?
アレイ自体は、ヒープ上に割り当てられたメモリです。人々は混乱し、値の型は常にスタックにあると思うし、これは必ずしも正しいとは限りません。 Yがint(値型)であっても、それがクラス(参照型)に含まれているため、INT Yがオブジェクトに格納される
public class X
{
public int Y;
}
:このクラスで例えば
、それ自体はヒープ上にある可能性が最も高い。
配列は似ています。 intは値の型として配列に格納されますが、配列自体はヒープ上にあり、したがってintも同じです。
これは本当に重要ではありません.CPUスタックやCPUヒープには直接アクセスできないため、制御できません。あなたがそれを制御できない場合、あなたはそれを心配する必要はありません。
あなたが、その場合には、重要なデータを復元するためにStackOverflowExceptionがまたはMemoryAllocationErrorの場合には、それについて少しを行うことができます
@BoltClock:うん、それのように見えるん。良いキャッチ。 –
また、http://blogs.msdn.com/b/ericlippert/archive/2009/05/04/the-stack-is-an-implementation-detail-part-two.aspxには、誰もが思っているように講義が必要ですメモリ管理言語のヒープ/スタックについて – delnan