程序:
我为大量数据创建了一个C ++计算程序,可以在一个或多个线程上运行。 (通过配置文件)
程序环境如下:C ++,OpenMp,Redhat-x64,malloc / free
Linux上的结果:
Windows上的结果:
问题:
为什么在Linux上使用更多线程时内存消耗会增加?
答案 0 :(得分:7)
一个公平的猜测是,Linux中的delete
将为未来的new
请求缓存已释放的内存,就像在Windows上一样,但Linux每个线程都有一个缓存,而Windows每个进程都有一个缓存。
(更准确地说,将是C ++运行时库确定这样的缓存如何工作)。
答案 1 :(得分:1)
使用/proc/<PID>/maps
或更好的pmap(1)
来确定网页的去向。
答案 2 :(得分:1)
您启动的每个线程都需要一个分配用于运行它的堆栈,以及任何线程局部变量的内存。我不完全确定每个线程的150Mb看起来是合理的,但线程本地数组可能会导致类似的事情。