3

程序:

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

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

Linux 上的结果:

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

Windows 上的结果:

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

问题:

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

4

3 回答 3

7

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

(更准确地说,是 C++ 运行时库决定了这种缓存的工作方式)。

于 2012-08-10T13:59:13.960 回答
1

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

于 2012-08-10T13:55:53.823 回答
1

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

于 2012-08-10T14:42:53.190 回答