c - 是否可以在共享内存上加载共享库?

标签 c memory linker shared

我有一个用 C 编写的服务器和客户端。我尝试在服务器中加载共享库,然后将库函数指针传递给客户端。这样我就可以更改库而无需编译客户端。

由于每个进程都有自己独立的内存空间,我想知道是否可以在共享内存上加载共享库,传递函数指针并将共享内存映射到客户端,然后让客户端执行代码服务器加载的库的名称。

最佳答案

根据定义,共享库是共享的,因此两个进程将使用相同的物理内存来存储库的代码段。因此,您不必编写一些狡猾的方案,只需将库和函数的名称从服务器传递到客户端,客户端将使用 dlopen() + dlsym() 获取函数地址>.

请注意,在这种情况下,将有两个数据段副本(如果库有一些全局或静态变量),例如如果服务器在库函数中设置了一些static变量,那么它的值对于客户端来说不会改变。

关于c - 是否可以在共享内存上加载共享库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2839522/

相关文章:

C fscanf 跳转值

c - 线程中的线程?

memory - 操作系统 "swap"和 "page"有什么区别?

c++ - 结构内存分配中的 char*

linker - AURIX TriCore 链接器脚本命令 "REGION_MAP"

visual-c++ - LNK2019 - Visual Studio 2013 - 尽管定义了所有符号仍出错

c - 如何用 C 中的结构修复无限循环

c++ - 从 void* 到 void(*)(void*)[-fpermissive] 的无效转换

linux - 在 Linux 上设置 zram device disksize 有什么限制吗?

c - MSFT 构建、cl 和具有跨库依赖关系的链接