In c#Stack/Heapでのメモリ割り当てはいつ行われるのですか?実行時またはコンパイル時に実行されます。私の研究から、すべてのメモリ割り当ては、実行時に値型と参照型の両方で発生することを理解しています。これは正しいです?c#Stack/Heapでのメモリ割り当てが発生する
0
A
答えて
1
コンパイル時にどうなりますか?プログラムはまだ実行されておらず、プログラムを実行する前にメモリを割り当てる必要はありません。これは実行時に発生する必要があります(実際に生成されたILを実行する場合)。
メモリ管理では、変数の作成時だけでなく、初めて変数を使用するときには発生しないように最適化されています。
0
実際の割り当ては混乱している可能性があります。実際の割り当ては、プログラムが実際に実行されているときに実行時にのみ実行され、割り当ての計算/決定が行われます。たとえば、次のような方法を考えてみます。
void Foo()
{
int i = 42;
Console.WriteLine(i);
}
コンパイラ今静的(コンパイル時に)しますi
は、スタック上のスペースの4つのバイトを必要とするであろうこと。ただし、プログラムが実際に実行されてから実際の割り当てが行われるまでは、そのプログラムは実行されません。
さらに、CLRがコードを読み込んでJIT(Just in Timeコンパイラ)に渡すまで、上記のメソッドはマシンコード(割り当てなどの操作の前提条件)にコンパイルされません。もちろん、実際のプロセスが作成されるまでは、たとえそれが実行されても、OSがメモリアドレス空間を割り当てても使用することはできません。
関連する問題
- 1. 派生C++クラスのメモリ割り当て
- 2. メモリの割り当て(C)
- 3. メモリの割り当て/割り当て解除(WindowsではC++)
- 4. C++の動的割り当てメモリ内での動的メモリ割り当て
- 5. C++クラス配列のメモリ割り当ての再割り当て
- 6. ポインタとCでのメモリ割り当て
- 7. Cでの動的メモリ割り当て
- 8. Cでのメモリ割り当て
- 9. C++でのメモリ割り当て
- 10. オブジェクトにメモリを割り当てるC#
- 11. 動的にメモリを割り当て、コピーコンストラクタでエラーが発生する
- 12. ArcGIS C#のメモリ割り当てのクラッシュ
- 13. cの配列のメモリ割り当て
- 14. C++のメモリ割り当ての問題
- 15. C++のメモリ割り当てHOWTO
- 16. c#3dアプリケーションのメモリ割り当て
- 17. 客観C:メモリの割り当て
- 18. C++コードのメモリ割り当てエラー
- 19. C++リリース、メモリの割り当ては、コンストラクタ
- 20. C++ポインタとメモリの割り当て
- 21. C++のメモリ割り当てnew []とdelete []
- 22. Cのmallocメモリ割り当て方式
- 23. C++メモリ割り当ての質問
- 24. .net c#クラスのメモリ割り当て
- 25. Cでの動的メモリ割り当て:なぜエラーが発生するのですか?
- 26. C++ STLリストノードのメモリ割り当てでsegfaultが発生する原因は何ですか?
- 27. C++でメモリを割り当て、割り当てを解除します
- 28. 割り当てメモリ**
- 29. メモリ割り当て
- 30. 割り当てメモリ
はい、メモリの割り当てはコンパイル時には実行できません。プログラムが実行されているときだけ、そのプログラムがメモリにロードする全てのオブジェクト( 'struct'または' class')が必要です。 – EvilTak
それは正しい...... – zerkms
スタック上の割り当てはコンパイル時に起こると主張する人もいます。次に、実際にスタックポインタを変更する命令を実行時に実行する必要があります。これは愚かな質問のようなものです。おそらく、あなたは[スタックとヒープが何であるか]を読むべきです(http://stackoverflow.com/questions/79923/what-and-where-are-the-stack-and-heap)。 –