什麼是記憶體洩漏

以 malloc 等配置的記憶體在使用後沒有以 free 釋放,指向該區域的指標也遺失,導致可用記憶體逐漸減少的缺陷。常發生在因錯誤而中途返回的路徑上忘記釋放。短時間的程式在結束時由作業系統回收,因此不明顯,但在長時間持續運作的伺服器或嵌入式裝置中,可用空間會一點一點減少,最後配置失敗。可用 Valgrind 或 AddressSanitizer(LeakSanitizer)等工具偵測。

日文名稱: メモリリーク

「記憶體洩漏」出現在2領域的2道練習題中(連結器與載入器與執行檔格式, C語言基礎等)。

這個名詞所屬的領域: C語言基礎

練習記憶體洩漏的題目

以C語言的malloc配置的記憶體,一般是從行程的哪個區域取得?

  1. A.text區段
  2. B堆積
  3. C.rodata區段
查看答案與解析

正確答案:B. 堆積

堆積是在程式執行中配置所需大小的記憶體,不需要時再以free歸還的區域。其特徵是配置的大小與生命週期可在執行時決定。malloc會自行管理空閒區域,不足時再請求作業系統擴大區域(在Linux中是brk或mmap系統呼叫)。若忘了free,就會殘留不再使用的記憶體,形成記憶體洩漏(memory leak)。

解析中的「記憶體洩漏」

出現「記憶體洩漏」的題目(2題)

  1. 以C語言的malloc配置的記憶體,一般是從行程的哪個區域取得?
  2. fill 與 use 是另外定義的函式。上方函式的問題點,下列何者正確?

相關名詞

動態記憶體配置 系統呼叫 巨集(macro) 未定義行為 位元欄位(bit-field) 函式指標 前置處理器 指標(pointer) 結構(struct) 對齊與填充

前往名詞解釋列表