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

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

本文关键字:增加 C++ 内存 Linux 多线程 为什么      更新时间:2023-10-16

Program:

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

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

Linux上的结果:

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

视窗上的结果:

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

问题:

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

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

(更准确地说,确定此类缓存如何工作的C++运行时库)。

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

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