我注意到我正在处理的本机C ++应用程序甚至在进入我的任何代码之前都有相当大的内存占用(20MB)。
(我指的是Windows中的“私有字节”度量,据我所知它是最有用的指标)。
我在“main()”函数的第一行放置了一个断点,当然,当达到该值时,占用空间为20MB。
EXE的大小只有几兆,因此不考虑它。
我还故意删除了所有的DLL,以证明它们不是原因。正如预期的那样,它会收到“Dll not found”消息,但足迹仍为20MB!
然后我想知道可能是静态初始化的对象是原因。
所以,我在“new”和“malloc”中添加了断点。在第一次点击时(对于第一个静态初始化器),内存已经是20MB。
任何人都有任何关于我如何诊断这些记忆的消息的想法?
因为它似乎是通常的new / malloc范例之外的内存,所以我很难理解如何调试。
干杯,
约翰
答案 0 :(得分:3)
您可以在没有调试信息的情况下编译您的应用程序,看看这是否会改变某些内容,调试功能会使某些内存变得安静。
答案 1 :(得分:3)
可能是你用你的应用程序拉了很多库。在将执行交给main()之前,大多数都会被初始化。检查您要链接的任何非标准库。
编辑:一个非常简单的解决方案是创建一个新项目,然后逐个链接您正在使用的库,每次都检查内存使用情况。即使这是一种丑陋的方法,你应该找到这种方式的罪魁祸首。
那里可能有一个更优雅的解决方案,所以你可能想花一些时间在谷歌搜索(免费)内存分析解决方案。
答案 2 :(得分:2)
在我的系统上,一个简单的MFC应用程序和一个空的Delphi应用程序都需要大约相同数量的专用字节 - 大约400K。因此,如果您的应用程序占用20Mb,那肯定是您的应用程序正在做的事情,而不是某些操作系统臃肿。您需要发布有关您的应用的功能,使用的库等的更多详细信息。