gpt4 book ai didi

c - Valgrind 显示 OS X 上的 hello world 程序有超过 200 个分配?

转载 作者:行者123 更新时间:2023-11-30 18:12:19 25 4
gpt4 key购买 nike

我今天在 Linux 机器上用 C 语言编写了一个链表,并在 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)

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

最佳答案

OS X 的架构非常糟糕。因为libdllibdyldlibmlibc等一些库被“打包”到了libSystem,所有这些都在加载库时初始化。其中大部分来自dyld。 Dyld 是用 C 和 C++ 编写的,这就是为什么 C++ 部分可能会增加分配数量。

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

<小时/>

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

关于c - Valgrind 显示 OS X 上的 hello world 程序有超过 200 个分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37218264/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com