dlopen 是否创建多个库实例?

2024-03-08

在网上搜索后,我似乎找不到答案。

当我第一次使用 dlopen 时,它似乎比此后的任何时间都花费更长的时间,包括如果我从程序的多个实例运行它。

dlopen 是否将 so 加载到内存中一次并让操作系统保存它,以便任何后续调用(甚至来自程序的另一个实例)都指向内存中的同一位置?

那么基本上运行一个库的程序的 3 个实例是否意味着同一个 .so 的 3 个实例被加载到内存中,或者内存中只有一个实例?

Thanks


dlopen 是否将 so 加载到内存中一次并让操作系统保存它,以便任何后续调用(甚至来自程序的另一个实例)都指向内存中的同一位置?

多次致电dlopen从单个进程内保证不会多次加载库。来自man page http://man7.org/linux/man-pages/man3/dlopen.3.html:

   If the same shared object is loaded again with dlopen(), the same
   object handle is returned.  The dynamic linker maintains reference
   counts for object handles, so a dynamically loaded shared object is
   not deallocated until dlclose() has been called on it as many times
   as dlopen() has succeeded on it.

当第一次致电dlopen发生了,图书馆是mmap编入调用过程。通常至少有两个独立的mmap电话:.text and .rodata部分(通常驻留在单个 RO 段中)被映射为只读,.data and .bss部分被映射为读写。

随后的dlopen从另一个进程执行相同的操作mmaps。然而,操作系统不必从磁盘加载任何只读数据——它只是增加已经加载的第一个页面的引用计数dlopen称呼。这就是“共享库”中的共享。

那么基本上运行一个库的程序的 3 个实例是否意味着同一个 .so 的 3 个实例被加载到内存中,或者内存中只有一个实例?

取决于你所说的“实例”。

每个进程都有自己的一组(动态分配的)运行时加载器结构来描述该库,并且每组都将包含共享库的一个“实例”(可以在不同进程中的不同地址加载)。每个进程还将有自己的可写数据实例(使用写时复制语义)。但是只读映射都将占用相同的物理内存(尽管它们可以出现在每个进程中的不同地址)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

dlopen 是否创建多个库实例? 的相关文章

  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • 赋值运算符和复制构造函数有什么区别?

    我不明白C 中赋值构造函数和复制构造函数之间的区别 是这样的 class A public A cout lt lt A A lt lt endl The copy constructor A a b The assignment cons
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 如何进行带有偏差的浮点舍入(始终向上或向下舍入)?

    我想以偏置舍入浮动 要么总是向下 要么总是向上 代码中有一个特定的点 我需要这个 程序的其余部分应该像往常一样四舍五入到最接近的值 例如 我想四舍五入到最接近的 1 10 倍数 最接近 7 10 的浮点数约为 0 69999998807 但
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • VS30063:您无权访问 https://dev.azure.com

    我正在尝试在 asp net core 2 1 mvc 应用程序中使用以下代码连接 Azure DevOps Uri orgUrl new Uri https dev azure com xxxxx String personalAcces
  • 为什么 FTPWebRequest 或 WebRequest 通常不接受 /../ 路径?

    我正在尝试从 ftp Web 服务器自动执行一些上传 下载任务 当我通过客户端甚至通过 Firefox 连接到服务器时 为了访问我的目录 我必须指定如下路径 ftp ftpserver com AB00000 incoming files
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 是否有一个 C++ 库可以从 PDF 文件中提取文本,例如 PDFBox for Java? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 去年 我使用 PDFBox 在 Java 中创建了一个应用程序来获取某些 PDF 文件中的原始文本 现在
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • 运行代码首先迁移更新数据库时出错

    我在迁移到数据库时遇到问题 并且似乎找不到我遇到的错误的答案 System MissingMethodException Method not found System Data Entity Migrations Builders Tab
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 如何在 GCC 5 中处理双 ABI?

    我尝试了解如何克服 GCC 5 中引入的双重 ABI 的问题 但是 我没能做到 这是一个重现错误的非常简单的示例 我使用的GCC版本是5 2 如您所见 我的主要函数 在 main cpp 文件中 非常简单 main cpp include
  • Swagger 为 ASP.CORE 3 中的字典生成错误的 URL

    当从查询字符串中提取的模型将字典作为其属性之一时 Swagger 会生成不正确的 URL 如何告诉 Swagger 更改 URL 中字典的格式或手动定义输入参数模式而不自动生成 尝试使用 Swashbuckle 和 NSwag 控制器 pu
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • 如何强制 cdn.rawgit.com 使用更新的文件

    我正在使用 cdn rawgit com 托管项目的一些脚本和 CSS 但无法刷新它 根据常见问题解答 对 cdn rawgit com 的请求通过 MaxCDN 的超快速内容交付网络进行路由 并在第一次加载时永久缓存 这会带来最佳性能并减
  • 为什么浏览器要为 CSS 属性创建供应商前缀?

    也许这是一个显而易见的答案 但是 Why on earth浏览器是否会决定创建自己的供应商前缀border radius等等 我的意思是 为什么我必须输入 moz border radius 10px webkit border radiu
  • 通过回调方法使用 Quarkus/Mutiny 将 MyRequestService 连接到 Reactive REST GET 端点

    上周我与Mutiny https smallrye io smallrye mutiny 图书馆 因为我需要一个Reactive https en wikipedia org wiki Reactive programming我的 REST
  • 使用paste0时转义斜杠

    我正在尝试将几个字符串连接在一起 包括反斜杠 但是 我似乎无法正确转义反斜杠 paste0 A B 给我Error unexpected symbol in paste0 A B while paste0 A B returns A B 我
  • DOM选择方法的文档顺序

    我知道实时 NodeList 返回getElementsByTagName保留元素的文档顺序 这是真的吗getElementsdByClassName getElementsByName and querySelectorAll方法 这些方
  • JavaScript 中的 window.location 替代方案

    什么是标准化替代品window location href财产 我在 w3schools com 上检查它是否已在所有主要浏览器中实现 因此没有问题 但我很好奇如何正确执行此操作 从这里可以看出该函数没有标准化 https develope
  • 我应该使用什么重定向 uri (OAuth 2.0)?

    我为 google API Console 注册了我的应用程序 我得到了我的客户秘密 客户 ID 以及两个重定向 uri urn xxxxxxx oob http localhostxxxxxx 当然 我使用这些项目并成功向谷歌请求令牌 但
  • MySQL 并发性,它是如何工作的以及我是否需要在我的应用程序中处理它

    我目前正在运行 MySQL 数据库 我的所有表都使用表引擎 InnoDB 每个登录我的应用程序的人都可以查看记录 我担心在某些时候两个用户可能会同时更新或插入记录 MySQL 是否能够优雅地处理这种类型的并发问题 还是我必须将其编程到我的代
  • PCRE 正则表达式反向引用有效,但子例程无效

    我正在尝试匹配文本 1 嘿嘿嘿嘿 2 嘿嘿嘿嘿 与正则表达式 a w 1 w b w w w c w 1 w Regex a火柴1完全 并且2完全 但最后一个 y Regex b完全匹配1 and 2 Regex c不匹配1 or 2 下列
  • WordPress 博客分页不起作用

    我仍然卡在这个问题上 我的 WordPress 博客上的分页无法正常工作 http www example com news http www example com news 当您单击不同的页码时 它会正确更新 URL 和页面标题 但不会
  • Swift Couple - Publishers.CombineLatest 在多个线程上

    当将 Publishers CombineLatest 与运行除 Main 的 sink 以外的线程的 Publishers 一起使用时Publishers CombineLatest并不总是被调用 这个问题并不是每次都会出现 这就是为什么
  • 在 Facebook 见解上找不到我的应用程序?

    我正在使用社交插件运行一个网站 所以我创建了一个 Facebook 应用程序 然后我想使用 facebook inform 来连接我的网站和应用程序 ps 我还在标题中添加了app id或meta 但我在连接列表中找不到我创建的应用程序 有
  • 如何在 Android 中将 getview() 与 SimpleAdapter 一起使用?

    我正在生成一个ListView用一个SimpleAdapter My SimpleAdapter代码如下 ListAdapter k new SimpleAdapter this val1 R layout mytask new Strin
  • QTextEdit 中的水平线

    我试图在一个水平线QTextDocument 我使用 HTML 进行格式化 为了画出我想要的线条 我自然地使用了 hr 标签 但这条线是灰色的 我想把它的颜色改为黑色 这些样式似乎不适用于hr元素 那么有没有一个简单的解决方法可以在我的文档
  • 如何在Python中使用“with open”打开多个文件?

    我想一次更改几个文件 iff我可以写信给他们所有人 我想知道是否可以以某种方式将多个开放调用与with陈述 try with open a w as a and open b w as b do something except IOErr
  • Flask 应用程序“使用 stat 重新启动”

    我已经构建了一些 Flask 应用程序 但在我最新的项目中 我注意到开发模式有些奇怪 终端中常见消息的第二行始终显示 Running on http 127 0 0 1 5000 Restarting with reloader 已被替换为
  • git bisect skip 如何选择下一个提交来尝试?

    使用时git bisect 一个人可以跑git bisect skip将当前提交标记为不可构建 不可测试的提交 尝试让 Git 选择其他提交进行测试 Git 如何决定在某个提交之后尝试哪个提交git bisect skip 实验表明这不仅仅
  • Backbone.js 查看实例变量?

    我正在学习 Backbone js 并试图弄清楚是否可以在 Backbone 视图中包含实例变量 我的目标是在实例化视图时从外部文件加载视图的模板 目前 我将它们存储在 Backbone 应用程序的全局命名空间中的全局变量中 但将模板存储在
  • 动态获取变量

    我正在使用 Go 模板来管理 Helm 的部署 我有这样的values yaml 文件 env dev config dev myname Hi live myname Bye 现在我想根据环境 开发 实时 获取值 喜欢 Values co
  • dlopen 是否创建多个库实例?

    在网上搜索后 我似乎找不到答案 当我第一次使用 dlopen 时 它似乎比此后的任何时间都花费更长的时间 包括如果我从程序的多个实例运行它 dlopen 是否将 so 加载到内存中一次并让操作系统保存它 以便任何后续调用 甚至来自程序的另一