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

sud*_*sud 3 shared-libraries static-libraries

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

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

R S*_*hko 7

这取决于操作系统.

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

它们还可以共享源自可​​执行文件的数据页(即全局和静态数据).会发生什么是这些页面与称为写时复制或COW 的技术共享.只要实例不修改数据页面,它们就会被共享.但是一旦实例修改了数据页面,它就会得到它自己的副本.

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