我的分析结果中的“_dyld_start”是啥意思?

Posted

技术标签:

【中文标题】我的分析结果中的“_dyld_start”是啥意思?【英文标题】:What does "_dyld_start" mean in my profiling results?我的分析结果中的“_dyld_start”是什么意思? 【发布时间】:2015-01-13 03:29:55 【问题描述】:

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

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

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

【问题讨论】:

“占用 _dyld_start 85% 的运行时间是否合理?” - 是的,如果您的程序非常短(hello world 或return 0)或者相当短并且希望动态链接器加载许多共享库(取决于所有图形+openGL 库,创建空窗口并立即关闭它)。如果是十分之一秒的 85%,这仍然是一个很小的值。如果你想有更少的时间 - 不要经常启动新的可执行文件,使用线程或寿命更长的进程并与它们通信。 【参考方案1】:

Joshua,任何更高的 main 函数都是 C 运行时支持的一部分(广义上);如果此类函数的名称包含“ld”或“dyld” - 它们是dynamic linker 的一部分。

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

“执行 Mach-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 是做什么的?”)

【讨论】:

以上是关于我的分析结果中的“_dyld_start”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

在用EXCEL做回归分析时,结果中的标准误差,t Stat,P-value,df,SS,MS,F,Significance F都是啥意思

msa是啥意思 关于msa是啥意思介绍

挖掘结果中的权威部分是啥意思? [关闭]

Tensorboard 个人资料页面中的“运行”是啥意思?

请高手指点:回归分析中的“multiple r ”“R Square ”“Adjusted R Square”“标准误差 ”是啥意思?

回归分析p值是啥意思?