[英]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.