返回信息流不太了解。 感觉是不拷贝到当前进程运行空间的吧。
那要是不在当前进程空间,怎么调用呢?
这是一条镜像帖。来源:北邮人论坛 / soft-design / #37590同步于 2010/2/21
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
请教,调用共享库中函数时,会把代码拷贝到当前进程空间么?
hman
2010/2/21镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
看起来在自己进程空间 实际上不在
过程如下
调用共享库函数--->共享库函数地址(看起来在进程空间)--->操作系统映射--->欺骗你帮你映射到共享库的实际空间,多个进程调用同一个共享库都映射到这一个地址
【 在 hman 的大作中提到: 】
: 不太了解。 感觉是不拷贝到当前进程运行空间的吧。
: 那要是不在当前进程空间,怎么调用呢?
【 在 hman 的大作中提到: 】
: 不太了解。 感觉是不拷贝到当前进程运行空间的吧。
: 那要是不在当前进程空间,怎么调用呢?
代码段一般是READONLY的,所以一个共享库中的代码段是所有需要的进程共用的,由动态链接器映射到进程的地址空间里
【 在 hman 的大作中提到: 】
: 不太了解。 感觉是不拷贝到当前进程运行空间的吧。
: 那要是不在当前进程空间,怎么调用呢?
如果拷贝到进程空间的话 那动态库还有存在的意义吗??
只是将代码页提交到当前进程的内存地址内,使其在当前的内存地址范围内可见。
一般是readonly,如果代码页在某一个进程里被修改,操作系统将通过copy-on-write机制建立一份修改进程独有的代码页,然后映射到相同的内存地址。
【 在 coolwc 的大作中提到: 】
: 看起来在自己进程空间 实际上不在
: 过程如下
: 调用共享库函数--->共享库函数地址(看起来在进程空间)--->操作系统映射--->欺骗你帮你映射到共享库的实际空间,多个进程调用同一个共享库都映射到这一个地址
: ...................
实际上也在吧?
实际上也在的话 那么如果有多个进程都用了这个共享库 那么这个库将“实际”存在于多个进程的空间 而现实是只有一份拷贝
【 在 SandFlee (龙之弈) 的大作中提到: 】
: 实际上也在吧?
都在的话那还叫啥“共享”
READ-ONLY 的都映射,COPY-ON-WRITE 的在修改的时候再拷贝到当前进程空间
【 在 SandFlee 的大作中提到: 】
: 实际上也在吧?
【 在 coolwc 的大作中提到: 】
: 实际上也在的话 那么如果有多个进程都用了这个共享库 那么这个库将“实际”存在于多个进程的空间 而现实是只有一份拷贝
这个库将”实际“存在于多个进程的”地址“空间。
进程空间?就是进程的地址空间吧