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