這個問題純粹是理論上的。Linux中是否有內存泄漏?
我想知道的Linux源代碼是否可能有內存泄漏,以及它們如何調試它,畢竟,考慮到它是Linux,它處理每個程序的內存?
我明明知道,Linux的,被寫在C,有malloc
和free
處理本身。我不明白的是我們如何衡量操作系統的內存泄漏。
請注意,這個問題不是Linux專用的;它還解決了Windows和MacOS X(達爾文)中的相應問題。
這個問題純粹是理論上的。Linux中是否有內存泄漏?
我想知道的Linux源代碼是否可能有內存泄漏,以及它們如何調試它,畢竟,考慮到它是Linux,它處理每個程序的內存?
我明明知道,Linux的,被寫在C,有malloc
和free
處理本身。我不明白的是我們如何衡量操作系統的內存泄漏。
請注意,這個問題不是Linux專用的;它還解決了Windows和MacOS X(達爾文)中的相應問題。
非常頻繁的非主流驅動程序和分段樹有內存泄漏。按照LKML,您可以偶爾找到處理SKB列表的角落案例網絡代碼中的錯誤修復。
由於內核的性質最多的工作是代碼審查和重構,但工作正在進行,以使更多的工具:
http://www.linuxfoundation.org/en/Google_Summer_of_Code#kmemtrace_-_Kernel_Memory_Profiler
在某些情況下,你可以使用框架,如用戶模式Linux和再利用像Valgrind的常規工具,試圖窺視運行代碼:
malloc和free(實際上是brk/sbrk,因爲malloc和free由libc in-process實現)的實現不是神奇或特殊的 - 它只是代碼,就像其他任何東西一樣,並且它背後有數據結構描述映射。
如果您想測試正確的行爲,一種方法是在用戶空間編寫測試程序,這些測試程序已知可以分配,然後正確釋放所有內存。運行應用程序,然後使用調試器在內核模式下檢查內部內存分配結構(或者更好,在進程關閉時檢查調試斷言)。
這應該檢查'malloc'和'free'是否正常工作,但操作系統代碼如何? –
這是內核調試器進來的地方。 –
所有的軟件都有漏洞,包括操作系統。其中一些錯誤會導致內存泄漏。
Linux有一個內核調試程序來幫助追蹤這些事情,但是人們必須發現它們存在才能追蹤它們。通常,一旦發現錯誤並且可以隨意複製,修復就變得更容易了(相對來說,顯然你需要一個好的編碼器來完成這項工作)。最難的部分是首先找到缺陷並創建可靠的測試用例來證明它們。這是您需要擁有熟練的QA團隊的地方。
所以我想這個答案的簡短版本是,良好的質量保證是一樣重要的良好編碼。
很可能,是的,某處存在內存泄漏。沒有一次內存泄漏就寫出那麼多代碼幾乎是不可能的(即使你是世界上最好的C程序員)。至於他們如何調試它,idk。 –
所有代碼都有錯誤;其中一些錯誤會導致內存泄漏。這包括操作系統代碼。但是,由於操作系統需要運行幾天/幾周/幾個月而無需重新啓動,因此可以預期這些錯誤將被最小化爲較小的級別。 –
所有的代碼都有bug ...呃不是我的!決不!至少我沒有發現任何和我的用戶沒有任何報告..沒有我! – JonH