在Windows中,如果有两个进程,每个进程使用相同的DLL,那么显然每个进程分别将DLL加载到其地址空间中,而在Linux中,共享对象被加载一次并映射到不同的进程。有人可以向我解释Windows方法的优缺点吗?
答案 0 :(得分:2)
我不确定差异是如此明显。 Windows通过加载DLL一次并将共享部分映射到每个进程,共享除DLL的所有用户之间的数据段之外的所有内容。但是,DLL中的任何全局数据都会为每个进程单独加载,以便进程不会无意中共享数据。如果linux不是很相似,我会感到惊讶,否则共享库可能会带来很大的安全风险,更不用说潜在的可靠性问题了。以下是几个参考文献:
来自stackoverflow:
Are .dll files loaded once for every program or once for all programs?
来自维基百科: