我的分析结果中的“_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都是啥意思
请高手指点:回归分析中的“multiple r ”“R Square ”“Adjusted R Square”“标准误差 ”是啥意思?