分析结果中的“_dyld_start”是什么意思

What does "_dyld_start" mean in my profiling results?

本文关键字:dyld start 是什么 意思 结果      更新时间:2023-10-16

我正在使用callgrind分析一些C++代码。 这是我第一次这样做。 我发现最高级别的功能(我假设调用所有镜头以启动程序运行的函数)称为_dyld_start。 我想知道这到底是什么。

另外,在我的一些需要很长时间才能运行的程序中,我的main()函数占据了_dyld_start调用的所有函数的大约 99% 的时间;然而,在我的运行时间较短(大约半秒)的程序中,我发现main()只占用了大约 85% 的_dyld_start时间, 其余的将dyldbootstrap::start(). 我假设这是一个与启动C++程序相关的函数。 占用_dyld_start运行时间的85%是否合理?

我正在使用 C++11 标准编译我的代码。 我正在我的操作系统/X 上编译,所以我正在使用 clang . 我的valgrind版本是 3.10.0。

Joshua,任何更高的主函数都是C运行时支持的一部分(广义上);如果这些函数的名称包括"ld"或"dyld" - 它们是动态链接器的一部分。

OSX 不支持静态链接的应用程序 (https://stackoverflow.com/a/5259427/196561),因此如果没有所需的共享库,则无法加载每个可执行文件。动态链接器加载可执行文件,分析该文件以查找所需的共享库并加载它们。然后链接器应该将库和可执行文件链接在一起(通过填充/编辑一些内存中的表),然后它才能将控制权转移到_start CRT 入口点,然后转移到main

"执行马赫-O文件",https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/MachOTopics/1-Articles/executing_files.html

Mach-O 可执行文件包含一个由一组加载命令组成的标头。对于使用共享库或框架的程序,其中一个命令指定用于加载程序的链接器的位置。如果您使用 Xcode,则始终是/usr/lib/dyld,即标准的 OS X 动态链接器。

Dyld man(列出一些调试变量来调试 dyld 工作):https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/dyld.1.html

关于 dyld 的帖子: https://www.mikeash.com/pyblog/friday-qa-2012-11-09-dyld-dynamic-linking-on-os-x.html 2012-11-09: dyld: OS X 上的动态链接作者:Gwynne Raskind("dyld到底是做什么的?")