gpt4 book ai didi

c++ - "_dyld_start"在我的分析结果中意味着什么?

转载 作者:太空狗 更新时间:2023-10-29 21:41:49 24 4
gpt4 key购买 nike

我正在使用 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。

最佳答案

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

OSX 不支持静态链接应用程序 (https://stackoverflow.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

A Mach-O executable file contains a header consisting of a set of load commands. For programs that use shared libraries or frameworks, one of these commands specifies the location of the linker to be used to load the program. If you use Xcode, this is always /usr/lib/dyld, the standard OS X dynamic linker.

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

关于c++ - "_dyld_start"在我的分析结果中意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27914468/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com