2011-04-17 70 views
2

我很困惑這個問題很長時間:.NET EXE和DLL之間的堆棧/堆區別

.NET EXE和DLL文件都有地址空間。我知道他們都有代碼空間和全局變量空間。但我想知道DLL是否有自己的堆和堆棧空間。

+0

DLLs不能有堆棧空間,因爲它們沒有線程。從DLL執行的代碼在調用進程的上下文中運行,並在該進程的線程中運行,從而將內存分配本地化爲應用程序,而不是DLL。 – 2011-04-17 09:34:45

+0

@cody當然一個DLL可以創建一個線程 – 2011-04-17 09:38:30

回答

6

的進程擁有堆。每個線程都擁有自己的堆棧。當EXE調用DLL中的函數時,會使用相同的堆棧,因爲函數調用在同一個線程中。

另一點是進程具有地址空間,EXE和DLL加載到該地址空間。

2

據我所知,

EXE:

  • 它是一個可執行文件。
  • 當系統推出新的exe文件,一個新的進程創建

DLL

  • 它是一個動態鏈接庫。

點擊此處瞭解:Differences between exe and dll

+3

當它甚至不試圖回答這個問題時,這個答案如何得到upvoted?你必須閱讀更多的標題:*「但我想知道該dll是否有堆空間和堆棧空間。」* – 2011-04-17 09:40:41