我一直试图追踪内存问题几天 - 我的程序使用大约3GB的内存,当它应该使用大约200MB-300MB.Valgrind实际上报告它在峰值时使用了~300MB,并且没有报告任何内存泄漏.
程序读取输入文件,并将每个唯一的单词存储在该文件中.它是多线程的,我一直使用4个线程运行它.我的主要数据来源是:
我正在进行大量的分配和解除分配(使用new和delete) - 每个唯一的字至少有两个.是否有可能因为某些原因而没有重用内存,导致程序继续获取越来越多的内存?随着它继续运行,它始终抓住更多.
总的来说,关于我应该从哪里去的任何想法?
编辑1(基于格雷厄姆的建议):我将尝试的一条路径是最小化分配.我将使用每个线程一个字符串(如果一个单词比这个字符串长,它可能会偶尔增长),但如果我正确记住我的代码,这将消除大量的新/删除调用.如果一切顺利,我将留下:一次性分配输入缓冲区,一次性分配每个线程的字符串(带有一些reallocs),每个映射条目两个alloc(一个用于键,一个用于值).
谢谢!