[C语言]内存泄漏问题Out Of Memory
2023-02-18 15:37:08 时间
看下面这段代码
void memory_leak() { int *p = (int *)malloc(sizeof(int)); return; }
上述代码在申请一段内存后直接返回,这样申请到的这块内存在代码中再也没有机会释放掉了,这就是内存泄漏。
内存泄漏是一类极为常见的问题,尤其对于不支持自动垃圾回收的语言来说,但并不是说自带垃圾回收的语言像 Java 等就不会有内存泄漏,这类语言同样会遇到内存泄漏问题。
有内存泄漏问题的程序会不断的申请内存,但不去释放,这会导致进程的堆区越来越大直到进程被操作系统 Kill 掉,在 Linux 系统中这就是有名的 OOM 机制,Out Of Memory Killer。
幸好,有专门的工具来检测内存泄漏出在了哪里,像valgrind、gperftools等。
内存泄漏是一个很有意思的问题,对于那些运行时间很短的程序来说,内存泄漏根本就不是事儿,因为对现代操作系统来说,进程退出后操作系统回收其所有内存,这就是意味着对于这类程序即使有内存泄漏也就是发生在短时间内,甚至你根本就察觉不出来。
但是对于服务器一类需要长时间运行的程序来说内存泄漏问题就比较严重了,内存泄漏将会影响系统性能最终导致进程被 OOM 杀掉,对于一些关键的程序来说,进程退出就意味着收入损失,特别是在节假日等重要节点出现内存泄漏的话,那么肯定又有一批程序员要被问责了。
相关文章
- ASP.NET MVC中使用jQuery Ajax通过FormData对象异步提交图片文件到服务端保存并返回保存的图片路径
- .NET中将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),并使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA
- SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别
- Web Deploy配置和使用Visual Studio进行Web项目发布部署
- .Net WebApi中使用Session使用
- .NET之NPOI Excel数据导出和批量导入功能
- MySQL 查询重复数据,删除重复数据保留id最小的一条作为唯一数据
- 常用正则表达式
- Packets larger than max_allowed_packet are not allowed(mysql数据查询提示:不允许超过允许的最大数据包)解决方案
- .NET轻松实现支付宝服务窗网页授权并获取用户相关信息
- C#在window服务配置Log4Net.dll
- 致于即将逝去的2108年,2019年您好
- 关于:未能加载文件或程序集“ICSharpCode.SharpZipLib”或它的某一个依赖项异常的解决方案
- Visual Studio编辑器还原项目NuGet提示某 NuGet 程序包还原失败:找不到“xxx”版本的程序包“xxx”
- 微信公众平台网页登录授权多次重定向跳转,导致code使用多次问题
- Visual Studio高效实用的扩展工具、插件
- 关于微信企业付款到零钱X509Certificate2读取证书信息,发布到服务器访问不到的解决方案
- 关于ASP.NET MVC 项目在本地vs运行响应时间过长无法访问时,解决方法!
- 彻底关闭windows10自动更新解决方案
- Window10升级遇到大坑错误代码:0xc000000e完美解决方案