加载和动态链接

问题描述:

当一个进程需要动态库中的函数时,是将整个库加载到内存中还是只加载函数?加载和动态链接

例如: 当我使用printf()或任何函数从libc的(假设它是一个动态库),被加载到内存或只是printf()单独功能的整体的libc?

是整个库加载到内存中还是只是函数单独加载?

答案取决于您“加载到内存”中的意思,以及您在哪个操作系统上运行程序。

让我们考虑一下Linux,并且典型地链接到libc.so

有,含.datalibc.so.6.text整个PT_LOADmmap()编入程序的第一条指令之前内存甚至执行(因为你的程序会记录它需要在其.dynamic部分libc.so.6)。

从此,代码需求调页当你访问它。当您拨打printf时,包含代码为printf的页面将从磁盘中分页,或者(更可能)从缓冲区高速缓存中重新使用。

+0

作者:“disk”(“paged in from disk”)u表示内存或交换。 – vanangamudi 2013-05-06 20:28:14

+0

@vanangamudi请使用整个单词,如“你”而不是“你”。不,通过“磁盘”我的意思是这种磁盘:http://en.wikipedia.org/wiki/Hard_disk_drive_platter – 2013-05-06 22:07:27