加载和动态链接
问题描述:
当一个进程需要动态库中的函数时,是将整个库加载到内存中还是只加载函数?加载和动态链接
例如: 当我使用printf()
或任何函数从libc的(假设它是一个动态库),被加载到内存或只是printf()
单独功能的整体的libc?
答
是整个库加载到内存中还是只是函数单独加载?
答案取决于您“加载到内存”中的意思,以及您在哪个操作系统上运行程序。
让我们考虑一下Linux,并且典型地链接到libc.so
。
有,含.data
和libc.so.6
.text
整个PT_LOAD
段mmap()
编入程序的第一条指令之前内存甚至执行(因为你的程序会记录它需要在其.dynamic
部分libc.so.6
)。
从此,代码需求调页当你访问它。当您拨打printf
时,包含代码为printf
的页面将从磁盘中分页,或者(更可能)从缓冲区高速缓存中重新使用。
作者:“disk”(“paged in from disk”)u表示内存或交换。 – vanangamudi 2013-05-06 20:28:14
@vanangamudi请使用整个单词,如“你”而不是“你”。不,通过“磁盘”我的意思是这种磁盘:http://en.wikipedia.org/wiki/Hard_disk_drive_platter – 2013-05-06 22:07:27