为程序分配内存?

时间:2008-09-29 03:58:54

标签: .net asp.net

我需要知道何时为特定程序分配内存。如何查看内存的分配位置。

4 个答案:

答案 0 :(得分:5)

你需要更具体的操作系统,如果它被解释或运行时编译(如PHP,JAVA,.NET等),可能需要语言。

但是,一般来说:

  • 当程序加载到内存中时,会分配静态和全局变量。
  • 当运行实例化它们的函数或块时,局部变量在堆栈上分配(有时是堆,取决于编译器)。
  • 程序中的其他点在创建对象时分配内存,并在销毁时(显式或通过垃圾回收)释放。
  • 程序还可以通过malloc或类似的内存分配调用显式地为OS分配内存。

应该注意的是,即使已经为OS分配了内存,它实际上可能还没有被分配 - 操作系统会等到内存被使用之后才会获得它的页面。内存分析器将帮助您了解给定进程的发生位置和时间。

分配内存的地方是一个更大的问题。有几点需要考虑:

  • 程序的观点(通常是程序可以在不与其他程序冲突的情况下运行的扁平虚拟内存区域 - 在32位机器上大约4GB)
  • 操作系统的观点,根据需要将内存页面交换出来,以便程序可以假装它们有一个漂亮,平坦,未分段的内存区域可供玩耍
  • CPU内存连续的观点
  • 内存控制器的观点,它可能有两根512根棍子和一根1GB的棍子,中间有一个空槽

您对哪种观点感到好奇?您是在编写在感兴趣的程序中运行的代码,与它共享内存,在同一个OS上运行,在同一个CPU上运行,还是将逻辑分析器连接到内存总线?

- 亚当

答案 1 :(得分:2)

我会在这里采取刺激并推荐dotTrace,这是我用过的最好的剖析器。它会告诉你内存使用情况等等。

答案 2 :(得分:1)

安装Process Explorer,在列表中找到您的应用程序/进程,右键单击“属性”,“性能”选项卡。

答案 3 :(得分:1)

就像一个警示性的故事,即使你自己没有多少分配,你使用的库可能会进行大量的分配,所以你需要一些与内核或框架相关的东西。正如Ben Hoffstein所说,dotTrace可能是.Net应用程序的一个很好的解决方案(我在查看问题的标签后才意识到这一点)