lab*_*nth 5 c linux malloc free memory-management
我有一个应用程序,我正在执行内存使用分析.我正在使用一些数据加载应用程序,并且应用程序是这样的,它从这个抽取的数据中缓存(以某些哈希表和其他数据结构的形式存储,比如说一些记录)信息.对于存储在内存中的每条记录,应用程序使用malloc/calloc分配内存.在一定时间之后,大约80%的这些记录超时并且应用程序释放它为这些记录分配的内存.为了检查应用程序的内存使用情况,我在后台运行了一个脚本来捕获top和"free -m"的输出,并绘制一个图表来查看系统的内存使用情况,如下所示.该图显示了在" - /+ buffers/cache"行下"free -m"打印的值中使用的列和使用列的趋势.我期待使用的图形在开始时增加,然后随着应用程序释放内存而减少.但这不是实际情况.顶部输出的RES也不会减少.有人可以帮助我理解Linux下的应用程序的内存动态.

如果您确定没有内存泄漏,这可能是由于您的分配器保留了已释放的内存。造成这种情况的原因可能有多种:
您的分配器可能预计将来会再次需要您释放的内存。这是通过消除系统调用来满足下一个分配请求的需要来减少分配内存的运行时开销的尝试。
您可能正遭受内存碎片的困扰。这意味着释放的内存驻留在仍包含尚未释放的对象的页面上,因此这些页面无法释放回系统。这使得您的程序占用的内存比仍在使用的对象占用的内存所代表的内存要多。
要查看您是否遇到的是后者而不是前者,请尝试分配一个大约是释放 80% 时释放的总大小一半的对象。如果您的程序大小增长了这个量,则意味着您释放的内存已碎片化。
| 归档时间: |
|
| 查看次数: |
121 次 |
| 最近记录: |