【发布时间】:2012-07-22 01:02:57
【问题描述】:
是为每个进程单独加载共享对象还是在它们之间共享一个共享对象?例如,假设某个程序使用 libc.so。然后启动该程序的两个进程。这个共享对象会在其内存区域中为每个进程加载两次,还是会在内存中的某个位置加载一次并映射到两个进程的内存中?
【问题讨论】:
-
共享对象被称为“共享”是有原因的。
标签: linux shared-objects
是为每个进程单独加载共享对象还是在它们之间共享一个共享对象?例如,假设某个程序使用 libc.so。然后启动该程序的两个进程。这个共享对象会在其内存区域中为每个进程加载两次,还是会在内存中的某个位置加载一次并映射到两个进程的内存中?
【问题讨论】:
标签: linux shared-objects
共享对象通过带有MAP_PRIVATE 标志的mmap() 加载。这意味着这些是写时复制映射,它们最初指向相同的内存,但一旦其中任何一个被修改,它就会在修改前被复制并“取消共享”。
【讨论】:
检查此thread。理论上每个进程都有自己的地址空间,线程应该用于这个目的,但这是系统实现的问题。
【讨论】: