當我在學習.NET時,我將它看作是一個運行我的.NET程序的平臺,它有自己的Stack堆棧&堆。從低級程序員的角度來看.NET框架
但是現在瞭解了更多關於事物之後,我發現.NET應用程序就像任何其他C/C++本機應用程序一樣。它採用可移植可執行文件(PE)文件格式,新數據目錄爲&。文本部分填充了MSIL代碼而不是機器代碼。唯一的區別是很少的DLL(被認爲是.NET平臺)(像任何其他的Dll依賴)被加載。
我想在入口點有一些機器代碼調用加載的DLL(.net平臺),並且這些DLL的函數從.text部分讀取MSIL(段更加正確)並生成等效機器代碼並將其放入某種緩衝區中(我不知道它是哪一個區域,因爲它們是隻讀的,所以它們不會是堆棧或堆?)。然後讓EIP指向這個指令緩衝區。最後幾條指令再次回調到DLL中,重複其餘MSIL的過程。
作爲Managed Heap
& Managed Stack
他們只是堆棧&棧的一部分。它只是很少的功能(稱爲GC)將跟蹤內存分配&從這部分內存中取消分配。
我喜歡這種現實的觀點。我不知道我有多遠。我只是猜測這些事情。請糾正我&告訴我更多關於此的信息。它與這種觀點有多相似?從哪裏可以從這個角度更多地瞭解.NET平臺?
我會建議你把Java的一個單獨的問題,以得到更好的答案。而且,對於Java,所有平臺上的答案都不一樣(除非是高級別 - 代碼在虛擬機中運行)。你只關心它是如何在Windows上完成的? – Yishai 2010-06-29 19:25:18
我同意@Yishai; Java與.NET有許多*顯着的差異,可能會混淆這個問題。保存一個單獨的問題。 – Randolpho 2010-06-29 19:27:12