首頁 >後端開發 >C++ >為什麼 Valgrind 報告使用 `` 的簡單程式仍可存取記憶體?

為什麼 Valgrind 報告使用 `` 的簡單程式仍可存取記憶體?

Barbara Streisand
Barbara Streisand原創
2024-11-29 01:47:10317瀏覽

Why Does Valgrind Report Still Reachable Memory with a Trivial Program Using ``?

Valgrind: Memory stillreachable with trivial program using

這個問題是關於 Valgrind 中關於仍可存取記憶體的警告。包含 的簡單程式

問題:

一個包含 的簡單程式。標頭會產生有關仍可存取記憶體的 Valgrind 警告。這是意外的,因為程式本身沒有分配標準庫中的物件。

#include <iostream>

int main() {
  return 0;
}

答案:

Valgrind 警告不是錯誤,而是一個錯誤特徵。 C 標準函式庫的許多實作都使用自己的記憶體池分配器。被破壞物件的記憶體不會立即釋放並傳回給作業系統,而是保留在池中以供日後重複使用。當程式退出時,記憶體池也沒有被釋放,導致 Valgrind 報告記憶體仍然可達。

解決方案:

有幾種方法可以停用池快取並強制STL 使用malloc 並釋放記憶體可能:

  • 使用GCC 2.91 至3.1:
g++ -D__USE_MALLOC ...
  • 使用GCC 3.2.2 和更高版本:
export GLIBCPP_FORCE_NEW=1
  • GCC 3.4及更高版本:
export GLIBCXX_FORCE_NEW=1

其他注意:

  • 此解決方案可能會減慢程式速度。
  • 此行為不是庫中的錯誤,而是提高效能的功能。
  • 其他標頭,例如 不存在此問題,因為它們不使用記憶體池分配器。

以上是為什麼 Valgrind 報告使用 `` 的簡單程式仍可存取記憶體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn