Dynamic 加载和动态链接

Dynamic 加载和动态链接,dynamic,linker,libraries,shared,libc,Dynamic,Linker,Libraries,Shared,Libc,当进程需要动态库中的函数时,是将整个库加载到内存中,还是仅加载函数 例如: 当我使用printf()或libc中的任何函数(假设它是一个动态库)时,是将整个libc加载到内存中,还是仅使用printf()函数 是将整个库加载到内存中,还是仅加载函数 答案取决于“加载到内存”的确切含义,以及运行程序的操作系统 让我们考虑Linux,以及典型的链接 LBC。所以 ./P> 在那里,包含libc.so.6的data和.text的整个PT\u加载段在程序的第一条指令执行之前就被mmap()加载到内存中(

当进程需要动态库中的函数时,是将整个库加载到内存中,还是仅加载函数

例如: 当我使用
printf()
或libc中的任何函数(假设它是一个动态库)时,是将整个libc加载到内存中,还是仅使用
printf()
函数

是将整个库加载到内存中,还是仅加载函数

答案取决于“加载到内存”的确切含义,以及运行程序的操作系统

让我们考虑Linux,以及典型的链接<代码> LBC。所以 ./P> 在那里,包含

libc.so.6
data
.text
的整个
PT\u加载
段在程序的第一条指令执行之前就被
mmap()
加载到内存中(因为程序在其
动态
部分中记录了它需要
libc.so.6


从那时起,当您访问它时,代码被按需分页到RAM中。当您调用
printf
时,包含
printf
代码的页面将从磁盘分页,或者(更有可能)从缓冲缓存中重新使用。

所说的“磁盘”(“从磁盘分页”)是指RAM或交换。@vanangamudi请使用完整的单词,例如“您”而不是“u”。不,我所说的“磁盘”是指这种磁盘: