嵌套 DLL 如何适应 VA 空间?

问题描述 投票:0回答:1

我在 Linux 中的单个虚拟地址 (VA) 空间的上下文中问这个问题。让该空间中的进程动态链接两个库(Lib1 和 Lib2),然后动态链接 Lib3。 Lib3 将如何适应进程的 VA 空间:两次,在 Lib1 和 Lib2 内,如 (1) 所示,或者一次,与 Lib1 和 Lib2 一起,如 (2) 所示?也就是说,Linux 能否保证给定的物理地址 (PA) 永远不会映射到单个空间内的两个 VA?

Address space mappings

linux
1个回答
0
投票

图书馆只会出现一次 - 也许根本不会出现。 与虚拟内存相关的一切都是惰性的:库页面仅按需加载。如果一个库确实需要另一个库存在,则将为该库保留虚拟内存 - 但仅此而已。实际上没有加载任何内容。 如果三个库依赖于第四个库,则第四个库的空间仅出现一次。

这很容易检查:拿一个更大的应用程序并在

/proc/<pid>/mem
中查看其虚拟内存布局。它只会包含 libz 或 libc 一次。

© www.soinside.com 2019 - 2024. All rights reserved.