c++ - 内存中的 DLL 大小和硬盘上的大小

标签 c++ performance optimization dll

DLL在内存中的大小和在硬盘上的大小有关系吗?

这是因为我使用的是任务管理器扩展 (MS),我可以转到列表中的一个 EXE 并右键单击 -> 模块,然后我可以看到这个 EXE 使用的所有 DLL。它有一个长度列,但它是以字节为单位的吗?而且DLL的值(Length)好像和硬盘上的(DLL)大小不一样。为什么?

最佳答案

有关系,但不完全直接或直截了当。

当您的 DLL 首次被使用时,它会被映射到内存中。这不会将它加载到内存中,只是在您的进程中分配一些地址空间,以便在需要时/可以加载它。然后,DLL 的各个页面通过请求分页加载到内存中——即,当您引用一些已分配的地址空间时,将加载映射到该/那些地址的代码(或数据)如果它不在内存中。

现在,地址映射确实占用了一点空间(映射的每兆字节地址空间占用一个 4K 页)。当然,当您将一些数据加载到内存中时,也会占用内存。

但是请注意,大多数页面也可以/将在进程之间共享,因此如果您的 DLL 一次被 5 个不同的进程使用,它将被映射 5 次(即,每个使用它的进程一次)但是内存中仍然只有一个物理拷贝(至少通常如此)。

在这两者之间,要准确地确定特定 DLL 的内存消耗是什么意思可能会有点困难。

关于c++ - 内存中的 DLL 大小和硬盘上的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761970/

相关文章:

excel - 在 R 中,如何找到最佳变量以最大化或最小化两个数据集之间的相关性

R optimParallel - 找不到函数

c++ - OpenCV 3.2.0 无法访问 xfeatures2d 中的 SURF/SIFT

java - 向 Android 版 Google map 添加 5900 多个标记。如何高效做事

mysql - 从某一行向后通过 MySQL 表记录进行 SELECT 的最快方法?

当 JS Profiling 打开时,JavaScript 代码运行得更快?什么?

linq - 返回 IOrderedEnumerable<T> 而不是 IEnumerable<T> 的方法是否有利?

c++ - 如何在开发机器上重现缺少 Qt 插件的问题?

c++ - MSVC 2008 时机更好吗?

c++ - 使用 VB 进行人工智能