簡體   English   中英

C++ 空程序內存泄漏

[英]C++ empty program memory leak

考慮以下代碼

int main(){
    return 0;
}

我用 g++ 編譯它並將輸出傳遞給 valgrind。 輸出如下。

==11752== HEAP SUMMARY:
==11752==     in use at exit: 72,704 bytes in 1 blocks
==11752==   total heap usage: 1 allocs, 0 frees, 72,704 bytes allocated
==11752== 
==11965== LEAK SUMMARY:
==11965==    definitely lost: 0 bytes in 0 blocks
==11965==    indirectly lost: 0 bytes in 0 blocks
==11965==      possibly lost: 0 bytes in 0 blocks
==11965==    still reachable: 72,704 bytes in 1 blocks
==11965==         suppressed: 0 bytes in 0 blocks

但是,使用 gcc 在 C 中編譯相同的代碼會產生這個 valgrind 輸出:

==11771== HEAP SUMMARY:
==11771==     in use at exit: 0 bytes in 0 blocks
==11771==   total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==11771== 
==11771== All heap blocks were freed -- no leaks are possible

看起來像編譯

看起來空的 C++ 程序實際上分配了內存並且沒有釋放它(這不是災難,因為它是一個“仍然可以訪問”的泄漏),我不知道為什么會發生這種情況。

我用 g++ 6.3 在 linux (solus os) 上做了這個測試。

有人可以解釋發生了什么嗎?

這不是災難,因為它是“仍然可以訪問”的泄漏

它甚至不是泄漏 程序不釋放某些全局指向的內存塊是非常常見的; free ing 是

  • 不必要的工作只會使程序退出速度變慢
  • 如果多個線程正在運行,可能會導致並發症(退出線程可能會從另一個線程下面拉出地毯)
  • 如果清理的其他部分可以訪問此塊等,則可能會導致並發症。

我不知道為什么會這樣。

要獲得線索,請運行valgrind --leak-check=full --show-reachable=yes ... 這將告訴您塊的分配位置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM