gpt4 book ai didi

c++ - C++/Qt应用程序的内存使用

转载 作者:搜寻专家 更新时间:2023-10-31 01:23:43 24 4
gpt4 key购买 nike

我使用的是 OS X 10.5.6。我有一个 C++ 应用程序,它带有一个用 Qt 制作的 GUI。当我启动我的应用程序时,它使用了 30 MB 的内存(由 OS X 事件监视器 RSIZE 报告)。

我使用此应用程序将文本文件读入内存、解析数据并最终将其可视化。如果我打开(读入内存、解析、可视化)一个 9 MB 的文本文件,Activity Monitor 报告我的应用程序从最初使用的 30 MB 内存增长到 103 MB。

现在如果关闭文件并删除解析和可视化的数据,应用程序的大小将保持在 103 MB。这对我来说听起来像是内存泄漏。但是,如果我再次打开该文件,将其读入内存,对其进行解析并可视化,应用程序将保持在 103 MB。无论我打开文件(或相同大小的另一个文件)多少次,我的应用程序内存使用都或多或少保持不变。这是否意味着它不是内存泄漏?如果是泄漏,每次打开文件时内存使用量应该会继续增长,不是吗?它增长的唯一时间是我打开一个比前一个更大的文件。

这正常吗?这个平台或库依赖吗?这是操作系统或库完成的某种缓存吗?

最佳答案

这看起来比较正常,但所有操作系统都略有不同。

在通常的应用程序生命周期中,应用程序从操作系统请求内存,并以其管理的大块形式获得内存(通过 C/C++ 标准库)。当应用程序获取/释放内存时,这一切都在应用程序内部完成,无需求助于操作系统,直到应用程序没有离开,然后调用操作系统以获得另一个大块。

在应用程序退出之前,内存通常不会返回给操作系统(尽管大多数操作系统确实提供了在需要时执行此操作的机制,并且某些 C/C++ 标准库将使用此功能)。应用程序不会将内存返回给操作系统,而是使用它所提供的一切并进行自己的内存管理。

但请注意:仅仅因为应用程序有内存并不意味着它当前正在占用芯片上的 RAM。偶尔使用或一段时间未使用的内存将暂时保存到二级/三级存储。

Activity Monitor:对于检查内存使用情况来说并不是一个非常有用的工具,因为您已经发现它只显示实际分配给应用程序的总量。它不显示有关应用程序如何在内部分配此内存(其中大部分可以被释放)的任何信息。检查 XCode 所在的文件夹,有一组广泛的工具可用于检查应用程序在开发环境中的工作方式。

注意:我避免使用页面等术语,因为它们与 C/C++/Objective C 无关,并且都是特定于操作系统/硬件的。

关于c++ - C++/Qt应用程序的内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/848169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com