Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows Linux中是否存在内存泄漏?_Windows_Linux_Macos_Memory Leaks_Operating System - Fatal编程技术网

Windows Linux中是否存在内存泄漏?

Windows Linux中是否存在内存泄漏?,windows,linux,macos,memory-leaks,operating-system,Windows,Linux,Macos,Memory Leaks,Operating System,这个问题纯粹是理论问题 我想知道Linux源代码是否有内存泄漏,以及他们是如何调试的,毕竟是Linux处理每个程序的内存 我显然明白,Linux是用C编写的,它必须处理malloc和free问题。我不明白的是我们如何衡量操作系统的内存泄漏 注意,这个问题不是Linux特有的;它还解决了Windows和MacOS X(darwin)中的相应问题。malloc和free的实现(实际上是brk/sbrk,因为malloc和free是由libc在进程中实现的)并不是神奇或特殊的——它只是代码,就像其他任

这个问题纯粹是理论问题

我想知道Linux源代码是否有内存泄漏,以及他们是如何调试的,毕竟是Linux处理每个程序的内存

我显然明白,Linux是用C编写的,它必须处理
malloc
free
问题。我不明白的是我们如何衡量操作系统的内存泄漏


注意,这个问题不是Linux特有的;它还解决了Windows和MacOS X(darwin)中的相应问题。

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


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

malloc和free的实现(实际上是brk/sbrk,因为malloc和free是由libc在进程中实现的)既不神奇也不特殊——它只是代码,就像其他任何东西一样,并且它背后有描述映射的数据结构


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

非主流驱动程序和暂存树经常出现内存泄漏。遵循LKML,您可以看到在角落案例处理SKB列表的网络代码中偶尔出现的错误修复

由于内核的性质,大多数工作是代码审查和重构,但仍在继续制作更多工具:

在某些情况下,您可以使用Usermode Linux之类的框架,然后使用Valgrind之类的常规工具尝试窥探正在运行的代码:


非主流驱动程序和暂存树经常出现内存泄漏。遵循LKML,您可以看到在角落案例处理SKB列表的网络代码中偶尔出现的错误修复

由于内核的性质,大多数工作是代码审查和重构,但仍在继续制作更多工具:

在某些情况下,您可以使用Usermode Linux之类的框架,然后使用Valgrind之类的常规工具尝试窥探正在运行的代码:


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

Linux有一个内核调试器来帮助跟踪这些东西,但是在跟踪它们之前必须先发现它们的存在。通常,一旦发现一个bug并可以随意复制,修复起来就容易多了(相对来说!显然你需要一个好的程序员来完成这项工作)。困难的部分是首先找到bug,并创建可靠的测试用例来演示它们。这就是你需要一个熟练的QA团队的地方


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

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

Linux有一个内核调试器来帮助跟踪这些东西,但是在跟踪它们之前必须先发现它们的存在。通常,一旦发现一个bug并可以随意复制,修复起来就容易多了(相对来说!显然你需要一个好的程序员来完成这项工作)。困难的部分是首先找到bug,并创建可靠的测试用例来演示它们。这就是你需要一个熟练的QA团队的地方


因此,我想这个答案的简短版本是,好的QA和好的编码一样重要。

很可能,是的,某个地方存在内存泄漏。如果没有一次内存泄漏,编写那么多代码几乎是不可能的(即使你是世界上最好的C程序员)。至于他们如何调试它,idk。所有代码都有bug;其中一些bug会导致内存泄漏。这包括操作系统代码。然而,由于操作系统需要在不重新启动的情况下运行数天/数周/数月,您可以期望将这些bug最小化到一个较小的级别。所有代码都有bug…嗯,不是我的!从不好吧,至少我还没有找到任何,我的用户也没有报告任何..不,不是我@马克,我真的希望他们被最小化!但是既然我不能做一个基准测试,我该如何检查哪一个操作系统泄漏最多?@Thaddee,触发内存泄漏的条件很可能与你在系统上所做的事情以及操作系统本身高度相关。如果我知道如何自动触发bug,我就不会以工作为生了!您正在考虑的操作系统的典型正常运行时间会有很好的相关性,并且对您来说可能比纯粹的泄漏更有用。如果没有一次内存泄漏,编写那么多代码几乎是不可能的(即使你是世界上最好的C程序员)。至于他们如何调试它,idk。所有代码都有bug;其中一些bug会导致内存泄漏。这包括操作系统代码。然而,由于操作系统需要在不重新启动的情况下运行数天/数周/数月,您可以期望将这些bug最小化到一个较小的级别。所有代码都有bug…嗯,不是我的!从不好吧,至少我还没有找到任何,我的用户也没有报告任何..不,不是我@马克,我真的希望他们被最小化!但是既然我不能做一个基准测试,那么我该如何检查哪一个操作系统泄漏最多呢?@Thaddee,触发内存泄漏的条件很可能非常特定于什么