关于如何加载共享对象(.so)文件,我有一个设计决定。
我将最终对我的选项进行基准测试,但我想得到我的同事stackoverflow同事的反馈。
通常,stackoverflow每个“问题”需要一个问题,但是这些问题是如此密切相关,我将它们放在一个“问题”中。
现在我有很多(1000-4000).so文件,每个.so文件都有一个用dlsym()解析的符号。我有许多共享这些.so文件的进程。这些进程中的每一个都是从一个共同的父进行分支。
以下是关于使用dlopen / dlsym / dlclose加载.so文件的性能的一些问题:
如果将.so文件加载到一个进程中,它是否会加载到另一个进程中? (例如,它是否使用Copy On Write,以便分别执行dlopen的两个进程实际共享.so的物理内存?)。
在fork之前在父进程中加载.so文件有多大优势? (例如:fork只需复制.so的页表而不是加载它。)
在尝试对我的选项进行基准测试时,我应该考虑的其他因素是什么?