Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在 Windows 中,如果有两个进程每个都使用相同的 DLL,那么显然每个进程分别将 DLL 加载到其地址空间中,而在 Linux 中,共享对象被加载一次并映射到不同的进程中。有人可以向我解释 Windows 方法的优缺点吗?
我不确定差异是否如此明显。Windows 通过一次加载 DLL 并将共享部分映射到每个进程,在 DLL 的所有用户之间共享除数据段之外的所有内容。但是,DLL 中的任何全局数据都是为每个进程单独加载的,这样进程就不会无意中共享数据。如果 linux 不是很相似,我会感到惊讶,否则共享库可能会带来重大的安全风险,更不用说潜在的可靠性问题了。这里有几个参考:
从堆栈溢出:
.dll 文件是为每个程序加载一次还是为所有程序加载一次?
来自维基百科:
http://en.wikipedia.org/wiki/Dynamic-link_library