尿常規(guī)能檢查出什么 如何檢查內(nèi)存泄漏?
如何檢查內(nèi)存泄漏?共享內(nèi)存通常指操作系統(tǒng)提供的進程間通信方式。你所說的叫做記憶池。例如,nginx使用內(nèi)存池。內(nèi)存池的主要功能不是防止內(nèi)存泄漏。相反,內(nèi)存池不容易通過Valgrind檢查內(nèi)存泄漏。例如
如何檢查內(nèi)存泄漏?
共享內(nèi)存通常指操作系統(tǒng)提供的進程間通信方式。你所說的叫做記憶池。例如,nginx使用內(nèi)存池。
內(nèi)存池的主要功能不是防止內(nèi)存泄漏。相反,內(nèi)存池不容易通過Valgrind檢查內(nèi)存泄漏。例如,如果您從內(nèi)存池中取出一段內(nèi)存并忘記將其返回內(nèi)存池,這不是內(nèi)存泄漏嗎?內(nèi)存池的主要優(yōu)點是避免了在小內(nèi)存分配過多的情況下頻繁地向操作系統(tǒng)申請內(nèi)存。使用大內(nèi)存,小內(nèi)存直接從內(nèi)存池中獲取。前者是將物理內(nèi)存轉(zhuǎn)換為虛擬內(nèi)存并以內(nèi)核狀態(tài)返回給用戶,后者是計算指針并通過算法返回給用戶狀態(tài)。
要防止內(nèi)存泄漏(和資源泄漏),一方面是良好的編程習慣(如C的goto分支、C的raii),另一方面是要學會使用Valgrind等內(nèi)存泄漏檢測工具。否則,最好主動接受GC。盡管您調(diào)用了資源類,但是您忘記了它也會泄漏內(nèi)存。