我的文本编辑器应用程序是否有内存泄漏?为什么它比记事本多消耗3倍的内存

时间:2011-12-16 07:10:07

标签: c++ memory-management memory-leaks qt4

我正在编写一个文本编辑器应用程序。作为一个实验,我运行应用程序并在任务管理器上监视其内存使用情况,因为我执行了不同的操作。

  • 当我第一次启动应用程序时,它使用了3000 kB。

  • 当我输入

  • 时,它大致保持不变
  • 当我点击保存时,它最高可达9000kb

  • 然后它只停留在8500kb(它没有回到3000kb)

这是由内存泄漏造成的吗?我有点困惑,因为我观察到与记事本类似的行为。

  • 启动:1500kb
  • 保存:6000 kb
  • 保存后,记忆保持在5000kb左右

另外,为什么我的应用程序占用的内存比Notepad.exe多3倍,这会导致什么样的事情呢?我应该担心吗?

4 个答案:

答案 0 :(得分:1)

首次启动的“文件保存”对话框可能会占用大量内存。例如,打开文件对话框会在窗口中嵌入资源管理器的副本,并将资源管理器加载到您的进程中,随身携带很多行李。

答案 1 :(得分:1)

首先,您想知道实际使用内存的位置。有许多复杂的程序可以进行内存分析/分析,但如果你想要比任务管理器更详细的东西,但仍然相当简单和免费,Sysinternals vmmap很棒。

http://technet.microsoft.com/en-us/sysinternals/dd535533

正如其他人所提到的,保存可能会导致其他库被引入。文本本身也会影响您的内存使用。 VMMap将帮助您确定您的数量和其他数量。那么你可以看到你的部分是否真的随着时间的推移而大幅增长。如果你不打算使用内存分析器,你可能需要大量的压力测试时间才能真正看到它是否泄漏内存,否则泄漏可能不会太大而不能轻易发现。

答案 2 :(得分:1)

您使用Qt的事实意味着您的软件中添加了许多不必要的代码。例如Qt Core超过2MB,Qt Gui大约是8MB。另一方面,微软可能使用纯C / C ++和Windows API对记事本进行编码,这意味着它们具有更小更快的可执行文件。

最后,它还取决于您的编译器。 MinGW将创建比Visual C ++编译器更大更慢的可执行文件。因此,如果可以,请尝试使用Microsoft的编译器。

答案 3 :(得分:0)

我在记事本中尝试完全一样,保存需要更多内存。如果打开当前文件并保存,则内存没有区别。最后,创建文件会占用大量内存。