Neu*_*tar 5 c++ macos profiling dyld c++11
我正在使用callgrind. 这是我第一次这样做。我发现最高级别的函数(我认为是负责启动程序运行的函数)被称为_dyld_start. 我想知道这到底是什么。
另外,在我的一些需要很长时间运行的程序上,我的main()函数占用了 ; 调用的所有函数的大约 99% 的时间_dyld_start;然而,在我的程序中,运行时间较短(大约半秒),我发现main()只花费了大约 85% 的_dyld_start时间,其余的时间都会dyldbootstrap::start()。我假设这是一个与启动 C++ 程序相关的函数。它占用 85% 的_dyld_start运行时间是否合理?
我正在使用 C++11 标准编译我的代码。我正在我的 OS/X 上编译,所以我使用clang. 我的valgrind版本是3.10.0。
Joshua,任何更高的 main 函数都是 C 运行时支持的一部分(广义上);如果此类函数的名称包含“ld”或“dyld” - 它们是动态链接器的一部分。
OSX 不支持静态链接应用程序(/sf/answers/368159921/),因此如果没有所需的共享库,则无法加载每个可执行文件。动态链接器加载您的可执行文件,解析它以获取所需的共享库并加载它们。然后链接器应该将库和可执行文件链接在一起(通过填充/编辑一些内存表),只有这样它才能将控制权转移到_startCRT 入口点,然后转移到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 到底是做什么的?”)
| 归档时间: |
|
| 查看次数: |
2299 次 |
| 最近记录: |