簡體   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