为什么在Linux上使用更multithreading时内存消耗会增长? (C ++)

程序:

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

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

Linux上的结果:

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

在Windows上的结果:

  • 无论使用的线程数是多less,进程大小仍然是110MB。

题:

为什么在Linux上使用更multithreading内存消耗会增长?

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

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

使用/proc/<PID>/maps ,或者更好的pmap(1)来找出页面的位置。

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