如果一个应用程序被运行两次那么是否在操作系统中就有两个独立的进程存在?

在看《深入浅出MFC》这本书的时候,书上有句话说:“在windows 3.x时代,窗口类只需注册一次,即可供同一程序的后续每一个实例使用(之所以能够如此,是因为所有进程同在一个地址空间”
我的问题是:什么叫应用程序的实例?我的理解是一个包含应用程序的进程。
如果这样的话,同一个应用程序被运行两次比方说打开两个记事本程序是不是就应该有两个独立的进程存在,那括号里说的所有的进程同在一个地址空间又怎么理解?因为据我所知每个进程有自己独立的地址空间的。难道是在早期的windows版本中地址空间是共享的这个意思?

是的,一般来说,每个进程是拥有自己独立的存储空间,那怕它们是同一个程序的多次执行。
但其实每个进程所占用的空间其实包含了代码段,数据段,堆栈段等。这些用途不同的存储空间是可以分别进行管理的,这也是段式内存管理的一个重要目标。这直接导致了不同的进程间可以拥有不同的数据内容(比如写字板里不同的文本),但它们可以共用一个代码段,因为这一部分不会因为运算的数据不同而有任何变化。
其实在Windows里,dll动态链接库也是这个思想,一些函数功能和它的代码部分,甚至在程序执行时并不装入内存,只有当程序运行到需要调用他们时才会被动态的真正装入内存,同时只装入内存一次,如果再有其它程序也需要调用这个dll,那么它们会共享这部分代码段,从而能有效的提高内存的使用,减少浪费。尤其是很多操作系统的底层调用,比如用于处理图形界面的显示等功能就可能被所有的图形界面程序用到,这时就可以大大提高内存的利用率。
温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网