分析结果中的“_dyld_start”是什么意思
What does "_dyld_start" mean in my profiling results?
我正在使用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到底是做什么的?")
- 在Google Kick start中提交时出错
- "Unable to start debugging. No process is associated with this object." - 在Visual Studio Code中使用GDB
- C++生成文件错误"implicit entry/start for main executable"
- Valgrind 在 QThread::start() 上报告内存泄漏
- 无法使用犰狳运行编译的 cpp 代码,因为 dyld:库未加载
- dyld:未找到符号:_PyBaseObject_Type
- 为什么我不能调用 QMetaObject::invokeMethod(&threadObj, &QThread::start, Qt::QueuedConnection)?
- 如何将IEnumerable与Process.Start的输出事件处理程序一起使用?
- 编译 GCC-5.0 OS X 狮子 dyld:找不到符号:__ZNKSt11logic_error4whatEv
- QThread start() return value
- 在Qt中获取输出:'QProcess::start()'和'QProcess:readAllStandardOutPut()'
- SFML: dyld:即使更新了库路径,库也未加载错误
- Android CMake "致命错误: 'bits/libc-header-start.h' 文件未找到"
- 在 Mac 上C++编译代码时处理“dyld:惰性符号绑定失败:找不到符号”错误
- Clion Cmake项目不编译:Dyld Mach-O,而是为模拟器构建(不是MacOS)
- dyld:惰性符号绑定失败:找不到符号:_yylex
- 仅在一台计算机上出现"0xc000007b Application Unable to Start Correctly"错误
- CMake & dyld: Library not loaded: @rpath/libLTO.dylib
- QCamera::start给出神秘的"failed to start"日志消息
- dyld:未加载库:@rpath/libopenblas.dylib