如何获取共享内存中的共享对象

2024-02-06

我们的应用程序依赖于外部第三方提供的配置(包括自定义驱动/决策功能),可作为 .so 文件加载。

独立地,它使用一块共享内存与外部 CGI 模块协作,其中几乎所有易失性状态都被保留,以便外部模块可以读取它并在适用的情况下修改它。

问题是 CGI 模块也需要来自 .so 的大量永久配置数据,并且主应用程序在两个内存区域之间执行大量完全不必要的复制以使数据可用。这个想法是将整个共享对象加载到共享内存中,并使其直接可供 CGI 使用。问题是:怎么办?

  • dlopen 和 dlsym 不提供任何用于分配 SO 文件加载位置的工具。
  • 我们尝试了 shmat()。它似乎只有在某些外部 CGI 实际尝试访问共享内存时才起作用。然后,所指向的区域就显得私密,就好像它从未被共享过一样。也许我们做错了什么?
  • 在每个需要它的脚本中加载 .so 是毫无疑问的。该结构的庞大规模,与调用频率相关(某些脚本每秒调用一次以生成实时更新),而且这是一个嵌入式应用程序,因此无法使用。
  • 简单地 memcpy() 将 .so 转换为 shm 也不好 - 某些结构和所有函数都通过指针互连。

使用共享内存时首先要记住的是,相同的物理内存很可能作为不同的地址映射到两个进程的虚拟地址空间中。这意味着如果在数据结构中的任何地方使用指针,它们都会导致问题。一切都必须通过索引或偏移量才能正常工作。要使用共享内存,您必须清除代码中的所有指针。

加载 .so 文件时,仅加载 .so 文件代码的一份副本(因此称为共享对象)。

fork也可能是你在这里的朋友。大多数现代操作系统都实现写时复制语义。这意味着当您fork,当一个进程写入给定的数据段时,您的数据段仅被复制到单独的物理内存中。

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

如何获取共享内存中的共享对象 的相关文章

  • 更快的算法来计算有多少数字可以被范围内的特定整数整除

    int a b c d 0 cin gt gt a gt gt b gt gt c for int i a i lt b i if i c 0 d cout lt
  • SetWindowsHookEx 函数返回 NULL

    我正在研究 DLL 注入 但收到错误如下 挂接进程失败 87 参数不正确 目标进程和dll都是64位的 注入代码为 BOOL HookInjection TCHAR target TCHAR dll name https msdn micr
  • WebClient读取错误页面的内容

    我有一个加载页面内容的应用程序 我使用 WebClient 类 即使服务器返回 404 500 等错误 我也需要检索内容 我需要这样的东西 WebClient wc new WebClient string pageContent try
  • 返回 int& 的函数[重复]

    这个问题在这里已经有答案了 我在网上查了一下发现一篇试图解释的文章std move和右值 http thbecker net articles rvalue references section 01 html并发现了一些我实在无法掌握的东
  • 如何使用汇编获取BIOS时间?

    我正在从头开始实现一个小型操作系统 用于教育目的 现在 我想使用汇编来获取 BIOS 时间 我对此进行了很多搜索 但找不到任何代码示例来执行此操作 如果有人可以提供任何参考或代码示例或与此相关的任何内容 我将非常感激 See 时钟中断 1a
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • 将 C# 反射代码移植到 Metro-Ui

    我正在尝试移植使用反射的现有 C 类 通用工厂 但我无法编译这段代码 Type types Assembly GetAssembly typeof TProduct GetTypes foreach Type type in types i
  • 特定设备的不同字体大小

    我目前正在开发通用应用程序 我需要分别处理移动设备和桌面的文本框字体大小 我找到了一些方法 但都不能解决问题 使用 VisualStateManager 和 StateTrigger 为例
  • 导出到 CSV 时 Gridview 出现空行

    这个问题是由进一步讨论引发的这个问题 https stackoverflow com questions 6674555 export gridview data into csv file 6674589 noredirect 1 com
  • 抽象类或接口。哪种方式是正确的?

    有两种方法可以选择抽象类或接口 微软解决方案和Oracle解决方案 微软 设计指南 请使用抽象 在 Visual Basic 中为 MustInherit 类而不是接口来将协定与实现分离 http msdn microsoft com en
  • 指示泛型返回动态类型的对象

    这个问题是我原来问题的后续问题here https stackoverflow com questions 2541184 using a type object to create a generic 假设我有以下泛型类 简化 class
  • 使用scanf()时如何区分整数和字符

    我只是使用该功能scanf 代码如下 scanf d a printf d a 当我输入1时 它会像我想要的那样打印1 但即使我输入 1a 它也会像以前一样打印 1 当用户输入非整数时 例如 2 3 12ab 1 a 我想向用户显示 输入整
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • asp.net c# 防止在从服务器端代码更改索引时触发 selectedindexchanged 事件

    我在同一个 aspx 页面上有两个下拉列表控件
  • 将 bignum 类型结构转换为人类可读字符串的有效方法是什么?

    我有一点问题 为了增长我的 C 知识 我决定尝试实现一个基本的 bigint 库 bigint 结构的核心将是一个 32 位整数数组 选择它们是因为它们适合寄存器 这将允许我在数字之间进行操作 这些操作将在 64 位整数中溢出 这也将适合寄
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • 如何强制执行特定的 UserControl 设计

    我正在编写一个基本用户控件 它将由一堆其他用户控件继承 我需要对所有这些后代控件强制执行某种设计 例如 顶部必须有几个按钮以及一个或两个标签 后代用户控件区域的其余部分可以自由放置任何内容 最初 我认为我可以将一个面板放到 Base Use
  • 如何使用 ASP.NET Web 表单从代码隐藏中访问更新面板内的文本框、标签

    我在更新面板中定义了一些控件 它们绑定到中继器控件 我需要根据匿名字段隐藏和显示用户名和国家 地区 但问题是我无法以编程方式访问更新面板中定义的控件 我如何访问这些控件 我也在网上查找但找不到很多参考资料 下面是来自aspx页面和 cs页面
  • 程序退出后,TcpListener Socket 仍处于活动状态

    当我的程序退出时 我试图停止 TCP 侦听器 我不关心套接字或任何活动客户端套接字上当前活动的任何数据 套接字清理代码本质上是 try myServer Server Shutdown SocketShutdown Both catch E

随机推荐

  • 将 html5 应用程序作为 Windows 可执行文件运行

    我在网上到处寻找这类事情 发现了很多类似的问题和文章 但没有一个回答这个问题 我有一个大型 HTML 5 应用程序 我想将其作为 Windows 上的可执行文件作为全屏本机应用程序运行 我可以想象你可以稍后在 c 中通过 webkit 来完
  • Leaflet:在 GeoJSON 层中使用动态过滤器

    我已经非常接近了 但我很难理解如何将多个用户提交的表单复选框值传递到 Leaflet geoJSON 过滤器函数并仅显示这些点 到目前为止我所拥有的 map filters on submit function e e preventDef
  • 如何使用 numba 优化 numpy.packbits?

    我正在努力优化numpy packbits import numpy as np from numba import njit prange njit parallel True def numba pack arr div su for
  • 如何在任何给定时间检查池中活动 sqlalchemy 连接的数量?

    我遇到过这样的情况 由于高流量负载 sqlalchemy 会不时耗尽活动连接 我想运行一些测试来验证和优化每个用例的池参数 但是 我找不到轮询活动连接计数的直接方法 当前设置如下 args mapping pool size 10 max
  • py2app 在构建过程中获取包的 .git 子目录

    我们在我们的工厂广泛使用 py2app 来生成自包含的 app 包 以便轻松进行内部部署 而不会出现依赖性问题 我最近注意到的一件事 但不知道它是如何开始的 是在构建 app 时 py2app 开始包含我们主库的 git 目录 例如 com
  • 加速(缓慢的)巨大的 WordPress 数据库

    我正在测试一个新项目 其中涉及使用 WordPress 安装 该安装有超过 150 万个帖子 通常帖子内容 标题只有一两行 所以很短 我已经有了强烈推荐的 W3 cache 插件 它很有帮助 但是当你第一次登陆一个页面时 需要 40 60
  • 检查菜谱中是否包含某种成分 - MYSQL

    嘿大家 我在有效运行查询 PHP 组合时遇到了一些麻烦 我似乎只是在 php ini 的内部循环中循环了太多结果集 我确信有一种更有效的方法可以做到这一点 非常感谢任何帮助 我有一张桌子 里面有 3500 个食谱 recipe rid re
  • 在这种情况下,为什么我必须显式解开字符串?

    我有一根绳子var oneString String 然后在一个方法中 当我想将一个字符串连接到oneString我必须这样做 oneString anyString 如果我不添加 我收到一个错误 String is not identic
  • xcode 错误:所选的运行目标对此操作无效

    我的应用程序在 4 3 模拟器和设备中运行良好 现在我想在 4 0 模拟器中测试它 并且我还有 4 2 1 设备 因此 我将 ios 部署目标设置为 4 0 也尝试过 4 2 但 xcode 给了我该错误 所选的运行目标对此操作无效 然后我
  • java.io.IOException:grpc 失败

    当我使用 call getFromLocationName 时 我收到一个 IOException 描述为 grpc failed 运行的代码 Override public void onMapReady GoogleMap google
  • 如何构造HttpPostedFileBase?

    我必须为此方法编写一个单元测试 但我无法构造 HttpPostedFileBase 当我从浏览器运行该方法时 它运行良好 但我确实需要一个自动单元测试 所以我的问题是 如何构造 HttpPosterFileBase 以便将文件传递给 Htt
  • C# 6 Elvis 运算符(空传播)是否短路

    为什么这段 C 代码会抛出 null 异常 bool boolResult SomeClass NullableProperty ItsOkProperty false 一旦 NullableProperty 求值为 null elvis
  • 使用 .net Core 3.1 的 Kestrel ssl JSON 配置中的证书问题

    我已经看到这个问题的答案 但它似乎不适用于 net core 3 1 此代码查找证书 using var store new X509Store Root StoreLocation LocalMachine store Open Open
  • 如何将 PHP 数组格式化为字符串

    我有这个 php 数组 items array Item 1 gt Value 1 Item 2 gt Value 2 Item 3 gt Value 3 我想知道是否有一个我从未听说过的优雅的 PHP 函数可以执行与此相同的操作 outp
  • 使用 Visual Studio 2019 部署到 Hololens 2

    我正在尝试部署到我的 Hololens 2 并尝试通过 wifi 连接到它 我按照此处的说明进行操作 https learn microsoft com en us windows mixed reality mrlearning base
  • 将 y 轴上的数字转换为字符串,其中 K 表示千 d3.js

    我正在使用 d3 js 图表来绘制 y 轴和 x 轴 它工作正常 但是 y 轴上的值可以说范围是 0 到 10000 我希望如果数字大于千 它将带有 K 如果数字是 1000 它将显示 1K 如果数字是 15000 它将在 y 轴刻度上显示
  • Android 开发 Windows Defender 需要排除哪些文件夹?

    我在Windows Defender中排除了以下文件夹 但 反恶意软件服务可执行文件 仍然使用大量CPU C Program Files Android Android Studio C Users ME android C Users M
  • 更改 LocalDb 的默认位置

    我首先使用 EF5 代码进行编程 并希望使用 LocalDb 如何更改 LocalDb 数据库文件的默认位置 默认位置是 USERPROFILE 目录 根据http blogs msdn com b sqlexpress archive 2
  • 如何为独立的 Sinatra 应用程序启用 SSL?

    我想在 Sinatra 中编写一个快速的服务器应用程序 它必须是独立的 即不使用 apache nginx passenger 但也必须支持 SSL 有没有一种简单的方法来启用 Sinatra 的 SSL 支持 例如使用 WEBRick 要
  • 如何获取共享内存中的共享对象

    我们的应用程序依赖于外部第三方提供的配置 包括自定义驱动 决策功能 可作为 so 文件加载 独立地 它使用一块共享内存与外部 CGI 模块协作 其中几乎所有易失性状态都被保留 以便外部模块可以读取它并在适用的情况下修改它 问题是 CGI 模