希望这不是重复的(我发现了很多类似的问题,但不完全是我要问的问题)。
\n\n当我运行时在linux上ldd <path/to/executable>,我会得到一个很好的共享库依赖项列表,以及动态链接器找到这些依赖项的路径(或者一条未找到依赖项的消息)。
在mac上使用时otool -L <path/to/executable>我得到依赖项,并且路径是相对于 rpath 的,即使依赖项不存在。本质上,它报告依赖关系应该相对于 rpath 的位置,而不是动态链接器发现的位置。据我了解,otool 直接从二进制文件中读取此信息,而不是像 ldd 那样调用链接器。
我知道我可以通过将 DYLD_PRINT_LIBRARIES 变量设置为 1 来运行可执行文件来获取这些路径,但这对于动态库不起作用,甚至对于可执行文件也不方便。
\n\n所以我的问题是,我可以在 mac 中获得与 ldd 完全相同的行为吗?
\n\no工具信息:
\n\n\xe2\x9e\x9c otool --version\nllvm-otool(1): Apple Inc. version cctools-906\nApple LLVM version 9.1.0 (clang-902.0.39.1)\n Optimized build.\n Default target: x86_64-apple-darwin17.5.0\n Host CPU: ivybridge\nRun Code Online (Sandbox Code Playgroud)\n tl;博士:有人可以解释下表中显示的性能差异吗?
代码设置:有一个整数数组,在for循环中填充了值.
VS项目设置:使用两个配置文件(配置设置).第一个是默认的Release配置文件,第二个是我们称之为D_Release,它是Release配置文件的精确副本,只有一个区别; D_Release配置文件使用多线程调试DLL(/ MDd).
我运行了两个配置文件的代码,对于每个配置文件,我将数组存储在堆,堆栈和bss中(因此有6种不同的配置).
我测量的时间如下:
------+---------+-----------
| | /MD | /MDd |
|------+---------+-----------|
| Heap | 8,5ms | 3,5ms |
|------+---------+-----------|
| Stack| 3,5ms | 3,5ms |
|------+---------+-----------|
| bss | 10ms | 10ms |
------+---------+-----------
Run Code Online (Sandbox Code Playgroud)
[开始编辑]
经过一些评论后,我在循环之前测量了工作集大小,得到了以下结果
------+---------+-----------
| | /MD | /MDd |
|------+---------+-----------|
| Heap | 2.23mb | 40.6mb |
|------+---------+-----------|
| Stack| 40.4mb | 40.6mb |
|------+---------+-----------|
| bss | 2.17mb | 2.41mb |
------+---------+----------- …Run Code Online (Sandbox Code Playgroud)