2011-04-17 140 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