繁体   English   中英

为什么在Linux上使用更多线程时内存消耗会增加? (C ++)

[英]Why does the memory consumption grows when using more threads on Linux? (C++)

程序:

我为大量数据创建了一个C ++计算程序,可以在一个或多个线程上运行。 (通过配置文件)

程序环境如下:C ++,OpenMp,Redhat-x64,malloc / free

Linux上的结果:

  • 当我在1个线程上运行它时,进程大小为177 MB。
  • 当我在2个线程上运行它时,进程大小为317 MB。
  • 当我在4个线程上运行它时,进程大小为600 MB。

Windows上的结果:

  • 无论使用的线程数为110MB,进程大小仍然相同。

题:

为什么在Linux上使用更多线程时内存消耗会增加?

一个公平的猜测是,Linux中的delete将缓存释放的内存以用于未来的new请求,就像在Windows上一样,但Linux每个线程都有一个缓存,而Windows每个进程都有一个缓存。

(更准确地说,将是C ++运行时库确定这样的缓存如何工作)。

使用/proc/<PID>/maps或更好的pmap(1)来确定页面的去向。

您启动的每个线程都需要一个分配用于运行它的堆栈,以及用于任何线程局部变量的内存。 我不完全确定每个线程150Mb看起来合理,但线程本地数组可能会导致类似的东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM