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

Axe*_*rja 3 c++ linux memory multithreading openmp

程序:

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

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

Linux上的结果:

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

Windows上的结果:

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

题:

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

MSa*_*ers 7

一个公平的猜测是,deleteLinux将缓存已发布的内存以备将来的new请求,就像在Windows上一样,但Linux每个线程都有一个缓存,而Windows每个进程都有一个缓存.

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

  • 它被认为是一个实现细节,没有明确的名称.它也有点抽象.我相信一些实现将具有多个池或缓存,以保持相同大小的释放块组合在一起. (2认同)