Linux中C应用程序的内存稳定性

Linux中C应用程序的内存稳定性,第1张

概述我想验证我为Linux编写和编译的C应用程序内存稳定性.它是一个网络应用程序,以每秒10-20个连接的速率响应远程客户端连接.从长远来看,内存增加到50MB,尽管应用程序正在调用删除...调查显示Linux没有立即释放内存.所以这是我的问题:如何强制Linux释放我实际释放的内存?至少我想这样做一次以验证内存稳定性.否则,是否有可靠的内存指示器可以报告我的

我想验证我为Linux编写和编译的C应用程序的内存稳定性.
它是一个网络应用程序,以每秒10-20个连接的速率响应远程客户端连接.
从长远来看,内存增加到50MB,尽管应用程序正在调用删除…

调查显示linux没有立即释放内存.所以这是我的问题:

如何强制linux释放我实际释放的内存?至少我想这样做一次以验证内存稳定性.
否则,是否有可靠的内存指示器可以报告我的应用实际持有的内存?最佳答案你所看到的很可能根本不是内存泄漏.如今, *** 作系统和malloc / new堆都会对内存进行非常复杂的记忆.总的来说,这是一件非常好的事情.您可能会尝试强制 *** 作系统释放内存,这只会损害您的应用程序性能和整体系统性能.

为了显示:

> Heap保留了几个虚拟内存区域供使用.在malloc之前,它们都没有实际提交(由物理内存支持).
>你分配内存.堆相应增长.你在任务管理器中看到了这个.
>您在堆上分配更多内存.它变得更多.
>释放在步骤2中分配的内存.但是,Heap不能缩小,因为#3中的内存仍然被分配,而Heap无法压缩内存(它会使指针无效).
>你malloc /新的东西.这可能会在步骤#3中分配的内存之后加入,因为它无法适应free’ing#2所打开的区域,或者因为堆栈管理器为剩下的块打开堆而没有效率# 2. (取决于Heap实现和分配/释放的内存块大小)

那么第二步的记忆现在已经死了吗?不必要.首先,一旦它变得高效,它最终可能会被重复使用.在不重用的情况下, *** 作系统本身可以使用cpu的虚拟内存功能(TLB)从应用程序下面“重新映射”未使用的内存,并将其分配给另一个应用程序 – 在苍蝇Heap意识到了这一点,并且通常以某种方式管理事物,以帮助提高 *** 作系统重新映射页面的能力.

这些都是宝贵的内存管理技术,具有通过Process Explorer呈现细粒度内存泄漏检测的无限副作用,大多无用.如果要检测堆中的小内存泄漏,则需要使用运行时堆泄漏检测工具.既然你提到你也可以在windows上构建,我会注意到微软的CRT内置了足够的泄漏检查工具.使用说明见:

http://msdn.microsoft.com/en-us/library/974tc9t1(v=vs.100).aspx

malloc的开源替代品可用于GCC/C++lang工具链,但我没有直接经验.我认为在linux上,Valgrind无论如何都是首选且更可靠的泄漏检测方法. (根据我的经验,比MSVCRT DeBUG更容易使用).

总结

以上是内存溢出为你收集整理的Linux中C应用程序的内存稳定性全部内容,希望文章能够帮你解决Linux中C应用程序的内存稳定性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1047243.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存