当程序导致 .so 文件加载到内存中时,它是作为一个整体加载的,还是仅加载必要的“块”?
答案1
不会。首先打开 .so 文件,然后mmap()
创建保存整个文件内容所需的虚拟地址空间。然而,只有当某些东西试图访问空间中的特定地址时,该访问才会导致页面错误,并且内核将从与该页面的偏移量相对应的文件中读取一个(4k)块到实际内存中。当它在实际内存中时,将重新开始访问。这就是请求分页。
当程序导致 .so 文件加载到内存中时,它是作为一个整体加载的,还是仅加载必要的“块”?
不会。首先打开 .so 文件,然后mmap()
创建保存整个文件内容所需的虚拟地址空间。然而,只有当某些东西试图访问空间中的特定地址时,该访问才会导致页面错误,并且内核将从与该页面的偏移量相对应的文件中读取一个(4k)块到实际内存中。当它在实际内存中时,将重新开始访问。这就是请求分页。