C Valgrind在空白程序上显示大量内存泄漏
我正在尝试学习如何使用valgrind,因此我编写了以下程序:C Valgrind在空白程序上显示大量内存泄漏,c,macos,valgrind,C,Macos,Valgrind,我正在尝试学习如何使用valgrind,因此我编写了以下程序: // no imports in the program either int main(void) { return 0; } 据我所知,这应该会泄漏任何内存,因此我应该得到valgrind的回复,表明这一点。然而,以下是valgrind所展示的: $ gcc strings.c -o strings.out && valgrind ./strings.out ==49859== HEAP SUMMAR
// no imports in the program either
int main(void) {
return 0;
}
据我所知,这应该会泄漏任何内存,因此我应该得到valgrind的回复,表明这一点。然而,以下是valgrind所展示的:
$ gcc strings.c -o strings.out && valgrind ./strings.out
==49859== HEAP SUMMARY:
==49859== in use at exit: 19,158 bytes in 165 blocks
==49859== total heap usage: 186 allocs, 21 frees, 27,606 bytes allocated
==49859==
==49859== LEAK SUMMARY:
==49859== definitely lost: 0 bytes in 0 blocks
==49859== indirectly lost: 0 bytes in 0 blocks
==49859== possibly lost: 8,840 bytes in 7 blocks
==49859== still reachable: 10,318 bytes in 158 blocks
==49859== suppressed: 0 bytes in 0 blocks
关于这一点,有几个问题:
- 为什么它说结尾使用了19158字节?我的想法是结尾应该是零字节,因为我甚至没有定义任何东西
- 左边的49859是什么意思
- 最后,
186个alloc,21个free,27606个字节分配的
从哪里来
==5689== Command: ./main.out
==5689==
Hello
==5689==
==5689== HEAP SUMMARY:
==5689== in use at exit: 0 bytes in 0 blocks
==5689== total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==5689==
==5689== All heap blocks were freed -- no leaks are possible
==5689==
==5689== For counts of detected and suppressed errors, rerun with: -v
==5689== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
libc–提供
printf
和main
的东西–在后台做很多事情。还请注意,仅在退出时使用内存并不意味着您有泄漏(请参阅泄漏摘要,没有明确的损失报告)。屏蔽系统分配内存的valgrind
附带的“抑制”文件通常只屏蔽Linux上的libc(并且不再完全屏蔽)。在实际的valgrind
手册中有生成新抑制文件(memcheck的第二种类型)的说明,例如valgrind
用于屏蔽100%的系统分配(版本3.12.0有),但更高版本没有。这对于Mac来说或多或少是正常的。启动代码分配了大量在退出时未释放的内存。你永远不会像在Linux上那样“释放所有内存”。比如说,,