3

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

(我指的是 Windows 中的“私有字节”度量,据我了解,这是最有用的度量)。

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

EXE 的大小只有几兆,所以这还不算。

我还故意删除了所有的 DLL,只是为了证明它们不是原因。正如预期的那样,它收到“找不到 Dll”消息,但占用空间仍然是 20MB!

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

因此,我在“new”和“malloc”中都添加了断点。在第一次命中(对于第一个静态初始化程序)时,内存已经是 20MB。

有人对我如何诊断是什么消耗了这段记忆有任何想法吗?

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

干杯,

约翰

4

3 回答 3

3

您可能会在没有调试信息的情况下编译您的应用程序,看看这是否会改变某些内容,调试能力会占用一些内存。

于 2009-05-09T17:41:35.537 回答
3

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

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

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

于 2009-05-09T17:57:18.103 回答
2

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

于 2009-05-09T17:46:48.237 回答