gpt4 book ai didi

c++ - 共享库地址空间

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:30 26 4
gpt4 key购买 nike

当我在研究共享库时,我读到一个声明

Although the code of a shared library is shared among multiple processes, its variables are not. Each process that uses the library has its own copies of the global and static variables that are defined within the library.

我几乎没有怀疑。

  1. 每个进程的代码部分是否在单独的地址空间?
  2. 共享库代码部分是否在某些全局(唯一)地址空间中。

我只是初学者,所以请帮助我理解。

谢谢!

最佳答案

共享库通过将文件内存映射到进程地址空间的某个部分来加载到进程中。当多个进程加载同一个库时,操作系统只是让它们共享同一个物理 RAM。

库中可以修改的部分,例如静态全局变量,通常以写时复制模式加载,因此当尝试写入时,会发生页面错误,内核通过将受影响的页面复制到RAM 的另一个物理页面(仅适用于该进程),映射重定向到新页面,最后写入操作完成。

回答您的具体问题:

  1. 所有进程都有自己的地址空间。进程之间物理内存的共享对每个进程都是不可见的(除非它们通过共享内存 API 有意这样做)。
  2. 所有数据和代码都存在于物理 RAM 中,这是一种地址空间。然而,您可能看到的大多数地址都是属于一个或另一个进程的地址空间的虚拟内存地址,即使该“进程”是内核。

关于c++ - 共享库地址空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11839168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com