本机应用程序的初始内存占用较大 我注意到,我正在处理的本地C++应用程序在进入我的代码之前有相当大的内存占用(20MB)。p>

本机应用程序的初始内存占用较大 我注意到,我正在处理的本地C++应用程序在进入我的代码之前有相当大的内存占用(20MB)。p>,c++,windows,debugging,memory,native,C++,Windows,Debugging,Memory,Native,(我指的是Windows中的“私有字节”度量,据我所知,这是最有用的度量) 我在“main()”函数的第一行放置了一个断点,果然,当达到该断点时,内存占用为20MB EXE的大小只有几兆,所以这并不能解释它 我还故意删除了所有DLL,只是为了证明它们不是原因。正如预期的那样,它会收到一条“未找到Dll”消息,但占用空间仍然是20MB 所以我想可能是静态初始化的对象造成的 因此,我在“new”和“malloc”中都添加了断点。对于第一个静态初始化器,在第一次命中它们时,内存已经是20MB 有人知道

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

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

EXE的大小只有几兆,所以这并不能解释它

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

所以我想可能是静态初始化的对象造成的

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

有人知道我该如何诊断是什么消耗了我的记忆吗

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

干杯


John

你可能在没有调试信息的情况下编译你的应用程序,看看这是否会改变什么,调试功能会消耗一些内存。

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

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

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


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

了解更多有关应用程序的信息可能会有所帮助。例如,您是否使用静态数据?您可以说您“删除了所有DLL”。但你仍然在使用系统DLL,对吗?你确定这不是问题吗?在某些情况下,Windows必须为您的应用程序加载DLL的私有副本(请参阅)。我确实在很多地方使用静态数据,但我相当确定在初始化静态数据之前内存占用已经存在(从“malloc”和“new”断点可以看出)。对我来说,使用内存的静态第三方库的建议似乎是最可能的罪魁祸首。我确实使用了大量的第三方静态库(包括openssl、sqlite、crypto++等)。有人对我如何确定哪些(如果有)会占用内存有什么建议吗?该应用程序是一个相当复杂的备份应用程序,使用了大量第三方库,包括openssl、crypto++、sqlite等。我完全同意这是我的应用程序,但我真正想了解的是,我如何找到我的应用程序中的位置?我想我已经排除了“我的”代码,所以矛头指向了第三方库。有没有关于如何调试的想法?是的,对不起,我应该说我在发布代码中得到了相同的结果。