当程序使用动态共享库时,它是否完全加载DLL(因此您可以在应用程序运行期间几乎从磁盘擦除DLL)或者在运行时期间每次根据需要加载DLL的一部分申请的生命?
我不知道 Windows 中的细节是如何工作的(在 Linux 中我非常了解内核中的负责代码),但至少在 *nix 系统中,只要有文件描述符/句柄,删除文件系统条目就会保持文件内容完好无损打开它。仅在关闭最后一个文件描述符/句柄后,存储设备上的块可能会被覆盖。Windows 经过 POSIX 认证,因此它遵循此行为。
DLL不会加载到预分配的内存中。它们是内存映射的。这会导致交换内存的逆转。文件的内容不是将 RAM 交换到磁盘,而是映射到进程地址空间,并最终通过磁盘/文件缓存存储在 RAM 中。*nix 操作系统中的共享对象也是如此。但 Windows 和 *nix 系统在处理重定位、符号导出等方面存在显着差异。