【发布时间】:2020-02-03 13:20:14
【问题描述】:
我正在开发一个程序,它处理一些图形渲染。我正在使用第三个。用于渲染的派对库,所以我所做的就是创建对象并从库中请求它们的渲染。纹理和字体等资源的加载和释放由该库完成。我的程序在 QNX 7 上运行。
我的问题是,在我运行程序一段时间后(不是那么多),我看到进程使用的内存增长得非常快,这是不行的。在我的程序中,我对图形内容进行了很多更改,这导致程序加载新的图像和字体并卸载当前未使用的那些。所有这些处理都是由第三方库中的代码完成的,我可以使用自己的代码来查看分配的内存是否已释放 - 我正在谈论的库具有显示使用了多少 CPU 和 GPU 内存的方法,并且还有释放内存的方法。我能够显示当前使用的内存,调用释放内存的方法,然后再次打印使用的内存。我看到使用的内存已经下降,这是我所期望的。
我使用 pidin mem 命令来显示每个进程使用的内存。当我调用第三个时,我可以看到我的进程清理了一些内存。党库功能。但是,它无法清理足够的内存。
我在 pidin mem 输出中看到了很多块,它们被命名为“**unlinked**”。以下是我从 pidin 获得的部分输出:
163879 1 MyGraphApp 12r SIGWAITINFO 0 175M 32K(516K)*
libm.so.3 @ b52a000 96K 4096
libstdc++.so.6 @ b544000 1044K 4096
libsocket.so.3 @ b716000 124K 4096
**unlinked** @24d90000 ( 0) 2048K
**unlinked** @24f90000 ( 0) 128K
**unlinked** @24fb0000 ( 0) 128K
**unlinked** @24fd0000 ( 210000) 64K
**unlinked** @24fe0000 ( 0) 128K
**unlinked** @25000000 ( 0) 128K
**unlinked** @25020000 ( 21f000) 4096
**unlinked** @25021000 ( 21f000) 36K
**unlinked** @2502a000 ( 0) 5400K
**unlinked** @25570000 ( 235000) 6164K
**unlinked** @25b75000 ( 227000) 28K
**unlinked** @25b7c000 ( 22d000) 8192
**unlinked** @25b7e000 ( 0) 128K
**unlinked** @25b9e000 ( 0) 128K
**unlinked** @25bbe000 ( 840000) 60K
**unlinked** @25bcd000 ( 22e000) 4096
**unlinked** @25bce000 ( 850000) 5804K
**unlinked** @26179000 ( 22e000) 28K
如您所见,我的应用程序使用了 175MB 内存。当我一开始启动应用程序时,这个内存低于 100MB。我看到唯一正在增长的部分是这些“**未链接**”块。
这个“**未链接**”内存是什么?我的理解是这是内存,它已经被释放但没有返回给操作系统。我的理解正确吗?
最重要的是 - 我可以释放标记为“**未链接**”的内存吗?谁负责执行此操作 - 我的应用程序以及可能来自第三方库或操作系统本身的代码?非常感谢有关此问题以及如何解决此问题的任何信息。
PS:我想提一下第三个。派对库和我的应用程序是使用 C++ 开发的。
最好的问候
【问题讨论】: