2

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

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

4

1 回答 1

1

是整个库加载到内存中还是仅加载了函数?

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

让我们考虑一下 Linux,以及针对libc.so.

在那里,包含and of的整个PT_LOAD段在程序的第一条指令甚至执行之前就被编入内存(因为您的程序记录了它在其部分中需要的内容)。.data.textlibc.so.6mmap() libc.so.6.dynamic

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

于 2013-05-06T03:47:32.200 回答