首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ldd输出说明

ldd输出说明
EN

Stack Overflow用户
提问于 2013-08-21 23:39:07
回答 1查看 9.3K关注 0票数 12

有人能给我解释一下ldd命令的输出吗?在以下示例中(在Gentoo系统上)

代码语言:javascript
复制
$ ldd /bin/date
  linux-vdso.so.1 =>  (0x00007fff6ffff000)
  librt.so.1 => /lib64/librt.so.1 (0x00007f54ba710000)
  libc.so.6 => /lib64/libc.so.6 (0x00007f54ba384000)
  libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f54ba167000)
  /lib64/ld-linux-x86-64.so.2 (0x00007f54ba919000)

第一行是什么意思?"linux-vdso.so.1 => (0x00007fff6ffff000)“=>没有指向任何共享库文件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-22 00:11:28

输出中最重要的部分是linux-vdso。VDSO是Virtual Dynamic Shared Object的缩写,它是一种将内核空间例程导出到用户空间的方法。主要原因是为了减少系统调用开销。通常,当系统调用发生时,它需要一些昂贵的操作,如从用户到内核的切换模式,从用户空间复制数据到内核空间等。为了减少这些类型的开销,使用VDSO,只需读取该vdso,就可以提取内存空间结果,即可以在不进行真正的系统调用的情况下获取gettimeofday()!

注意,并不是所有的系统调用都支持VDSO,只有getcpu()、gettimeofday()、time()等系统调用才支持VDSO,这是完成这些任务的一种非常快的方法。此外,内存地址linux-vdso.so.1点是随机的,在不同的ldd调用中,您将看到linux-vdso.so.1点指向不同的内存位置。这样做就好像没有人可以预先预测地址一样。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18361845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档