Valgrind为OS X上的hello world程序显示超过200个alloc?

时间:2016-05-13 19:47:43

标签: c macos valgrind

我今天在C上编写了一个链接列表,在Linux机器上工作,所有内容都在Valgrind中检出。然后我在OS X上在家里运行相同的测试(少数推送然后删除列表)并获得了大量的分配。

==4344== HEAP SUMMARY:
==4344==     in use at exit: 26,262 bytes in 187 blocks
==4344==   total heap usage: 267 allocs, 80 frees, 32,374 bytes allocated
==4344== 
==4344== LEAK SUMMARY:
==4344==    definitely lost: 0 bytes in 0 blocks
==4344==    indirectly lost: 0 bytes in 0 blocks
==4344==      possibly lost: 0 bytes in 0 blocks
==4344==    still reachable: 0 bytes in 0 blocks
==4344==         suppressed: 26,262 bytes in 187 blocks
==4344== 
==4344== For counts of detected and suppressed errors, rerun with: -v
==4344== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

我知道代码很好,没有任何泄漏。所以我只是注释掉了列表测试,并在main中只编译了printf("test\n");,它显示了263个带有76个释放的分配(我在列表测试中有4个有意的分配)。为什么我在OS X上获得了这么多的分配?这只是操作系统的功能吗?我不明白为什么当我做一个printf时我为什么会有263个分配...

2 个答案:

答案 0 :(得分:0)

Valgrind对OS X的支持目前正在积极开展。您最好的方法是确保使用SVN中继版本,并经常更新。

Valgrind向您报告的错误存在于OS X系统库中。这些不是你的程序的错,但是因为即使是简单的程序,包括这些系统库,Valgrind也会继续捡起它们。 Valgrind主干中的抑制不断更新以捕获这些问题,使您可以专注于代码中可能存在的实际问题。

以下命令允许您使用Valgrind trunk,如果您还没有:

svn co svn://svn.valgrind.org/valgrind/trunk valgrind
cd valgrind
./autogen.sh
./configure
make -j4
sudo make install

完全披露:我是Valgrind开发人员之一,他们提供了支持OS X 10.11的补丁

答案 1 :(得分:-1)

OS X的架构非常糟糕。由于libdllibdyldlibmlibc和其他一些库被“打包”到libSystem中,因此在加载库时会初始化所有这些库。他们大多来自dyld。 Dyld是用C和C ++编写的,这就是为什么C ++部分可以推高分配数量的原因。

这只是Apple的事情,而不是OS X的事情。我写了一个替代的C库。它没有很多“不需要的分配”。

此外,分配是由打开FILE *引起的。请注意,3个流(stdinstdoutstderr)会在运行时初始化。