【问题标题】:At runtime, how can I determine programmatically how much memory is used by dynamically-linked libraries?在运行时,如何以编程方式确定动态链接库使用了多少内存?
【发布时间】:2012-02-29 22:23:56
【问题描述】:

我想知道我的应用程序使用了多少内存。我还想知道我的程序的哪一部分使用的内存最多。例如,我有一个使用 100MB 内存的进程,该进程中有一个使用 90MB 内存的 .dll。我想知道“什么”.dll 占用了 90MB。

我想取这个值并在我的程序中使用它;我想制作一个服务器,您可以在其中查看各个部分的内存使用情况。

此应用程序将在 Windows 上运行。

【问题讨论】:

  • Process Explorer 告诉你什么?
  • 这与这个问题无关,我想在我的应用程序中使用这些值。
  • 所以,您想以编程方式找出答案。这是一个非常重要的细节,您选择在您的问题中省略。
  • @Lightness Races in Orbit,很抱歉我忘了提。

标签: c++ windows memory dll


【解决方案1】:

这个问题完全取决于操作系统。

(我假设 DLL 转换为 Linux 世界中动态加载的库和 ELF 共享对象)

对于 Linux 应用程序,您的应用程序可以顺序读取 /proc/self/maps 文本伪文件。

如果您知道您的应用程序进程 id 是 1234,您还可以阅读 /proc/1234/maps 文件,例如通过在终端中输入

 cat /proc/1234/maps

还有/proc/self/smaps/proc/1234/smaps稍微详细一点。

【讨论】:

  • 添加操作系统,该程序将在windows上运行。
  • Linux 什么时候开始支持 DLL 的?
  • @LightnessRacesinOrbit:早于 Windows。但它们被称为共享对象。
  • @VladLazarenko:它们是一种等效技术,为共享对象的概念建模。但是,它们不是 DLL。这显然是一个 Windows 问题。
  • 编辑:没有看到你的回放。删除了这篇文章。
猜你喜欢
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
相关资源
最近更新 更多