【问题标题】:How can i get memory size allocated by my program?如何获得程序分配的内存大小?
【发布时间】:2012-09-13 22:02:37
【问题描述】:

我用 c 和 opencv 编写我的项目。 我想打印有关分配的内存或程序使用的内存的信息。 是否有功能可以提供有关内存的信息? 最后我使用 Qt for Linux and Windows,

提前致谢。

【问题讨论】:

标签: c++ c qt memory opencv


【解决方案1】:

您可以将包装器写入mallocfree,以跟踪您正在使用的内存量。

编辑:如果您还想在外部库中拦截对 malloc 和 free 的调用,则必须在共享库中定义它们并在 libc 之前加载它。如何执行此操作取决于您的操作系统。

【讨论】:

  • 如果你加载了一个库并使用了未包装的malloc,那么你的程序是否使用了该内存?
  • 你能给我举个关于 malloc 作为包装器和免费的例子吗?
  • @RemusRusanu 确实有可能。可以直接调用操作系统内存预留​​函数。像 sbrk (虽然不推荐,因为它会干扰一些 malloc 实现)。 memmap 被现代 malloc 使用,并提供隔离的内存块。 VirtualAlloc 在 Win32 上,相同的概念。或者NTHeap 的东西。
【解决方案2】:

在 Linux 上,您查看 your own process info pseudo-file:

/proc/[pid]/statm
Provides information about memory usage, measured in pages. The columns are:
size       total program size
           (same as VmSize in /proc/[pid]/status)
resident   resident set size
           (same as VmRSS in /proc/[pid]/status)
share      shared pages (from shared mappings)
text       text (code)
lib        library (unused in Linux 2.6)
data       data + stack
dt         dirty pages (unused in Linux 2.6)

在 Windows 上,您查看自己的进程 Process Object 性能计数器:

Private Bytes 显示当前进程已分配但不能与其他进程共享的字节数。

【讨论】:

    【解决方案3】:

    如果您检查 elf、转储或映射文件,您还可以在构建期间对代码/数据段进行某种程度的内存分析。 堆栈使用的 GCC 命令行选项是:-fstack-usage 和 -fcallgraph-info。

    【讨论】:

    • -1 我很确定 OP 要求在运行时分配内存。
    猜你喜欢
    • 1970-01-01
    • 2011-08-16
    • 2015-04-28
    • 2013-01-01
    • 2021-11-01
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多