Linux中是否有内存泄漏?

这个问题纯粹是理论上的。

我想知道Linux的源代码是否可能有内存泄漏,以及它们是如何debugging的,毕竟考虑到Linux是处理每个程序的内存的。

我明白,用C编写的Linux必须处理mallocfree 。 我不明白的是我们如何衡量操作系统的内存泄漏。

请注意,这个问题不是针对Linux的; 它也解决了Windows和MacOS X(达尔文)中的相应问题。

相当频繁的非主流驱动程序和分段树有内存泄漏。 按照LKML,您可以偶尔找到处理SKB列表的角落案例网络代码中的错误。

由于内核的本质,大多数工作都是代码审查和重构,但是正在进行的工作是制定更多的工具:

http://www.linuxfoundation.org/en/Google_Summer_of_Code#kmemtrace_-_coreel_Memory_Profiler

在某些情况下,您可以使用像Usermode Linux这样的框架,然后使用像Valgrind这样的传统工具来尝试访问正在运行的代码:

http://user-mode-linux.sourceforge.net/

malloc和free(实际上是brk / sbrk,因为malloc和free是由libc in-process实现的)并不是神奇或特殊的,它只是代码,就像其他任何东西一样,后面还有数据结构来描述映射。

如果你想测试正确的行为,一种方法是编写测试程序在用户空间已知的分配,然后正确地释放所有的内存。 运行应用程序,然后使用调试器检查内核模式下的内部内存分配结构(或者更好的是,在进程关闭时检查调试断言)。

所有软件都有错误,包括操作系统。 其中一些错误将导致内存泄漏。

Linux有一个内核调试器来帮助追踪这些事情,但是人们必须先发现它们存在才能追踪到它们。 通常情况下,一旦发现了一个错误,并可以随意复制,就会更容易修复(相对而言,显然你需要一个好的编码器来完成这项工作)。 最难的部分是首先找到缺陷,并创建可靠的测试用例来展示它们。 这就是您需要熟练的QA团队的地方。

所以我想这个答案的简短版本就是,好的QA就像编码一样重要。