问一个基础问题(50分)

  • 主题发起人 hellotao
  • 开始时间
H

hellotao

Unregistered / Unconfirmed
GUEST, unregistred user!
同在一个进程内

同在一个地址空间内有什么区别?
 
。。。没有差别
 
别看问题简单,
却很少有几位能说清楚地,
 
进程是指在一组数据进行的操作,而地址空间是指一段区域!但两者都能说明是在同
一个地址空间内!
 
共享使用DLL的时候,DLL实际存放的地址跟进程调用的地址是不一样的。
如有一个DLL-A,两个进程B, C. B&C都调用DLL,那么运行B的时候,B有
一个具体存放的地方,调用A时,系统把A调进内存,存放的地方不是在B的
4G内存地址空间内。C也相同。看下图:
DLL A:
======0xFFF000=======
......
======0xFFFFFF=======
B:
======0x3FF000=======
...
//调用A的地址
==0x3FFcc0===
...
======0x3FFFFF=======
C:
======0x8FF000=======
...
//调用A的地址
==0x8FFcc0===
...
======0x8FFFFF=======
而实际上,
B&C调用的A的实际地址只有一个!!!上图的调用地址(0x3FFcc0, 0x8FFcc0)指向的具体
物理地址是相同,只不过映射到具体进程中的地址不同而已。
理解的不是很透彻,阐述的也不是很明白,不过大致的原理应该没错。
 
另一进程中的数据可以引入到本进程的空间中。
 
例:在win2000中每个进程都有自己的地址空间,dll也一样,但在16位的win31中,所有
进程调用一个dll时用的是相同的地址空间,我当年被这差点搞死...
 
接受答案了.
 
顶部