【问题标题】:Can an "unlinked" memory in QNX be freedQNX 中的“未链接”内存可以释放吗
【发布时间】: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++ 开发的。

最好的问候

【问题讨论】:

    标签: c++ memory qnx


    【解决方案1】:

    取消链接意味着不再可以使用 shm_open 按名称打开它。但是,仍然存在与该对象相关的任何内存映射 (mmap) 或文件描述符 (shm_open) 都会阻止它被实际释放。

    【讨论】:

    • 有没有办法找出与未链接的内存仍然相关的内容?
    猜你喜欢
    • 2015-06-26
    • 2015-04-21
    • 2020-07-17
    • 2013-07-18
    • 2011-07-21
    • 1970-01-01
    • 2022-01-21
    • 2021-09-09
    • 2011-01-12
    相关资源
    最近更新 更多