gpt4 book ai didi

c - 内存中一次只需要一份动态库?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:03 25 4
gpt4 key购买 nike

我读了the article关于动态库。我无法理解下面的句子。

For programs that require multiple libraries, shared libraries can reduce the memory footprint of the program (both on disk and in memory at run time). This is because multiple programs can use a shared library simultaneously; therefore, only one copy of the library is needed in memory at a time.

执行重定位过程(加载动态库等)是ld-linux.so 的职责。

ld-linux.so 如何知道所需的库已经加载?

程序如何共享它们?

库更新了怎么办?新启动的程序是加载新的还是使用常驻内存的?

最佳答案

抱歉,这不是您所有问题的答案,它只是回答分享部分:

诀窍是虚拟内存管理。当一个程序或共享库被加载到内存中时,它的代码被简单地映射到进程的虚拟内存空间中。由于它被映射为写保护内存区域,因此相同的内存页可以映射到任意数量的虚拟内存地址空间。虚拟内存管理器唯一需要知道的是文件的哪一部分“支持”页面。

当多个进程引用同一部分时,虚拟内存系统总是只会加载该部分一次,因为它会记住当前哪些内存页驻留在内存中。

即使在使用共享库的一个程序在另一个使用相同共享库的进程启动之前终止的情况下,虚拟内存管理器在大多数情况下也能够避免重新加载共享库。这是因为包含共享库的内存页面将被标记为未使用,但只要内存不需要用于其他目的,所谓的页面缓存就会记住内存页面的内容。当重新加载共享库时,VM 只需查找仍包含所需代码的内存页面。

关于c - 内存中一次只需要一份动态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19247995/

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