原生应用程序的初始内存占用量很大

时间:2009-05-09 17:26:41

标签: c++ windows debugging memory native

我注意到我正在处理的本机C ++应用程序甚至在进入我的任何代码之前都有相当大的内存占用(20MB)。

(我指的是Windows中的“私有字节”度量,据我所知它是最有用的指标)。

我在“main()”函数的第一行放置了一个断点,当然,当达到该值时,占用空间为20MB。

EXE的大小只有几兆,因此不考虑它。

我还故意删除了所有的DLL,以证明它们不是原因。正如预期的那样,它会收到“Dll not found”消息,但足迹仍为20MB!

然后我想知道可能是静态初始化的对象是原因。

所以,我在“new”和“malloc”中添加了断点。在第一次点击时(对于第一个静态初始化器),内存已经是20MB。

任何人都有任何关于我如何诊断这些记忆的消息的想法?

因为它似乎是通常的new / malloc范例之外的内存,所以我很难理解如何调试。

干杯,

约翰

3 个答案:

答案 0 :(得分:3)

您可以在没有调试信息的情况下编译您的应用程序,看看这是否会改变某些内容,调试功能会使某些内存变得安静。

答案 1 :(得分:3)

可能是你用你的应用程序拉了很多库。在将执行交给main()之前,大多数都会被初始化。检查您要链接的任何非标准库。

编辑:一个非常简单的解决方案是创建一个新项目,然后逐个链接您正在使用的库,每次都检查内存使用情况。即使这是一种丑陋的方法,你应该找到这种方式的罪魁祸首。

那里可能有一个更优雅的解决方案,所以你可能想花一些时间在谷歌搜索(免费)内存分析解决方案。

答案 2 :(得分:2)

在我的系统上,一个简单的MFC应用程序和一个空的Delphi应用程序都需要大约相同数量的专用字节 - 大约400K。因此,如果您的应用程序占用20Mb,那肯定是您的应用程序正在做的事情,而不是某些操作系统臃肿。您需要发布有关您的应用的功能,使用的库等的更多详细信息。