可执行文件的多个实例(使用静态库构建)是否可以在RAM上共享任何内容

时间:2010-01-09 08:13:40

标签: shared-libraries static-libraries

假设基于静态库构建了可执行文件foo.exe,并且该foo.exe的6个实例同时在计算机上运行。 由于除了RAM上的读写部分之外,所有代码都是相同的(只读部分),因此RAM中的这6个实例之间是否会共享以提高性能?

我知道如果上面的foo.exe使用共享库,即使有6个实例运行,这些共享库中只有1个实例将在RAM中。

1 个答案:

答案 0 :(得分:6)

这取决于操作系统。

对于Linux和Solaris,所有实例肯定会共享包含代码的内存页(或正确调用的文本)。

他们还可以共享源自可​​执行文件的数据页(即全局和静态数据)。这些页面与名为copy-on-write或COW的技术共享。只要实例不修改数据页面,它们就会被共享。但是一旦实例修改了数据页面,它就会得到它自己的副本。

我猜测现代版本的Windows会做同样的事情,但我不确定。