加文

希望是美好的……
随笔 - 0, 文章 - 209, 评论 - 0, 引用 - 0
数据加载中……

dll和进程的地址空间

使用动态链接库的理由:

1. 他们扩展了应用程序的特性

2. 简化了项目管理

3. 有助于节省内存

4. 促进资源共享

5. 促进本地化

6. 提供特殊目的。

在创建dll的时候,我们必须给连接器指定dll开关,这个开关会使得连接器在生成dll文件影响中保存一些与可执行文件略微不同的信息,这样操作系统的加载程序能够将该文件识别为dll,而不会将它识别为应用程序。

应用程序使用dll函数之前,必须将该dll的文件映像到调用进程的地址空间中。有两种方式:一种是隐式载入链接,另外一种是显示运行时链接。

一旦dll文件影响到一个进程的地址空间后,进程的所有线程就可以调用dll中的函数了。事实上,该dll几乎完全丧失了dll的身份,进程中的线程来说,该dll中的代码和数据就像一些附加的代码和数据,碰巧放到进程的地址空间中了。当线程调用dll的一个函数时,该函数会在程栈中取得传给他的参数,并使用线程栈存放他需要的局部变量。Dll中函数创建的任何对象都为调用线程或者调用进程所拥有-------dll绝对不会拥有任何对象。

如果运行同一个可执行文件的多个实例,这些实例就不会共享可执行文件中的全局变量和静态变量。Windows通过使用写时复制机制,保证这一点。Dll中的全局变量和局部变量也是通过完全相同的方法处理的。当一个进程将一个dll文件映射到自己的地址空间中时,系统也会为全局变量和静态变量创建新的实例。

posted on 2012-02-08 17:14 加文 阅读(855) 评论(0)  编辑 收藏 引用 所属分类: Compile


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理