我们的应用程序依赖于外部,第三方提供的配置(包括自定义驱动/决策功能),可加载的.so文件。如何在共享内存中得到共享对象
独立地,它使用共享存储器,其中几乎所有的挥发性状态被保持的组块的外部CGI模块,从而使外部模块可以读取它并修改它适用配合。
问题是CGI模块还需要很多来自.so的永久配置数据,而主应用程序在两个存储区之间执行了大量完全不必要的复制操作以使数据可用。这个想法是让整个共享对象加载到共享内存中,并使其直接可用于CGI。问题是:如何?
- dlopen和dlsym不提供任何设备来指定加载SO文件的位置。
- 我们试过shmat()。它似乎只在某些外部CGI实际尝试访问共享内存之前起作用。然后,指向的区域就像私密,就好像它从未共享一样。也许我们做错了什么?
- 在需要它的每个脚本中加载.so都是没有问题的。结构的庞大规模与呼叫频率相关(某些脚本每秒调用一次以生成实时更新),而这是一个嵌入式应用程序,它使其不起作用。
- memcpy()将.so放入shm中也不好 - 某些结构和所有函数通过指针相互关联。
虽然它不直接回答我的问题,但我猜这是最接近它。我还没有看到一个有用的调用shmat()与第二个参数不同于NULL。 – 2010-01-31 00:01:43
将它留空,并让系统决定正在存储的内存段的位置,并将其地址返回给您。 – mloskot 2010-01-31 00:18:57