[C语言]内存泄漏问题Out Of Memory
看下面这段代码
void memory_leak() { int *p = (int *)malloc(sizeof(int)); return; }
上述代码在申请一段内存后直接返回,这样申请到的这块内存在代码中再也没有机会释放掉了,这就是内存泄漏。
内存泄漏是一类极为常见的问题,尤其对于不支持自动垃圾回收的语言来说,但并不是说自带垃圾回收的语言像 Java 等就不会有内存泄漏,这类语言同样会遇到内存泄漏问题。
有内存泄漏问题的程序会不断的申请内存,但不去释放,这会导致进程的堆区越来越大直到进程被操作系统 Kill 掉,在 Linux 系统中这就是有名的 OOM 机制,Out Of Memory Killer。
幸好,有专门的工具来检测内存泄漏出在了哪里,像valgrind、gperftools等。
内存泄漏是一个很有意思的问题,对于那些运行时间很短的程序来说,内存泄漏根本就不是事儿,因为对现代操作系统来说,进程退出后操作系统回收其所有内存,这就是意味着对于这类程序即使有内存泄漏也就是发生在短时间内,甚至你根本就察觉不出来。
但是对于服务器一类需要长时间运行的程序来说内存泄漏问题就比较严重了,内存泄漏将会影响系统性能最终导致进程被 OOM 杀掉,对于一些关键的程序来说,进程退出就意味着收入损失,特别是在节假日等重要节点出现内存泄漏的话,那么肯定又有一批程序员要被问责了。
十年开发经验程序员,离职全心创业中,历时三年开发出的产品《唯一客服系统》
一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的网站在线客服系统,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的全渠道在线客服系统,致力于帮助广大开发者/公司快速部署整合私有化客服功能。
开源地址:唯一客服(开源学习版)
官网地址:唯一客服官网