C++ 程序立即使用 2 GB RAM : how to find culprit?

标签 c++ memory-management ram

我有一个程序,当在初始化时被查询时,它立即使用 > 2 GB 的 RAM。基本上代码是这样的:

#include <blah>

int main() {
    cout << get_mem_usage() << endl;
    //Lots of things happen, but no significant memory usage
    return 0;
}

输出: [2013-02-15 18:38:05.865283] 2147.71 Mb

但是,我正在链接到许多不同的共享对象文件:我检查了 ldd 并链接到 58 个库,.so 的总大小为 66 MB。

我很确定 get_mem_usage 程序返回了正确的值:这些值与 top 和 massif 输出一致。

我还应该提到,我正在链接高能物理分析的 ROOT 框架。

我使用的是 Linux x86_64,get_mem_usage() 函数是自己开发的。

如果可能的话,我想减少程序的内存使用量。

最佳答案

我的第一个猜测:您正在链接的某些库中的静态初始化。

main() 的第一行插入一个长停顿,然后查看/proc//以查看内存分配的位置。例如:

  • /proc/12345/task/12345/maps
  • /proc/12345/task/12345/smaps

关于C++ 程序立即使用 2 GB RAM : how to find culprit?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14881843/

相关文章:

c - 为什么在 C 中使用指针时不需要指定数组大小?

java - AS400 jt400 获取内存使用情况

c++ - 使用 vector 引起的段错误

C++ 将 char 转换为 int

memory-management - JVM 和 CLR 分配优化

ios - iOS 上使用 Memory Monitor 时虚拟内存消耗和实际内存的区别

c++ - 类所需的模板参数

c++ - 使用从源字符串中提取的子字符串选择性地填充 vector

java - 将数据库表加载到内存中使用

recursion - 为什么永远的循环不会崩溃?为什么无限递归会崩溃?