为什么代码段对于同一程序的不同实例是通用的

mah*_*esh 2 c c++ operating-system process

我想知道为什么代码段对于同一程序的不同实例是常见的.

对于Eg:考虑程序P1.exe正在运行,如果正在运行P1.exe的另一个副本,则代码段对于两个正在运行的实例都是通用的.为什么会这样?

答案将受到高度赞赏.

提前致谢.

unw*_*ind 5

如果有问题的代码段是从DLL加载的,则可能是操作系统很聪明并重新使用已加载的库.这是使用动态加载的库代码的核心要点之一,它允许代码在多个进程之间共享.

不确定Windows是否足够聪明,可以使用常规EXE文件的代码部分执行此操作,但如果可能的话,它会有意义.

它也可能是虚拟内存愚弄你; 两个进程可能看起来在同一地址上具有相同的内容,但该地址是虚拟的,因此它们实际上只是显示物理内存的映射.

  • 当然,Windows 已经足够聪明了。但是,如果 DLL 能够在其所需的 * 基地址 * 加载,则只能在多个进程之间共享 DLL。如果它必须在其他地方加载,它就不会被其他进程重用。这就是为什么最好对您的 DLL 进行 *rebase* 设置,以便它们都配置了唯一的基地址。通过搜索 *dll rebase* 可以获得大量信息。 (2认同)