2015-05-28 32 views
0

我正在查看一些使用openmp來並行化循環的源代碼。在循環內部構造了一個stringstream並向其中寫入了幾個字符,最後使用stringstream :: str()檢索了這些字符。直到stringstream構造函數被移出循環並用對stringstream :: clear()的調用取代之前,循環的並行化似乎沒有對性能產生太大的影響。g ++ stringstream構造函數是否有一個臨界區?

stringstream構造函數中是否存在臨界區或其他阻塞機制?如果是這樣,是否在某處記錄?代碼是用g ++ 4.9.2編譯的。

+0

它需要分配內存。 –

回答

1

銷燬一個stringstream對象會銷燬其內存緩衝區。您正在看到循環內堆分配的影響。

調用clear不釋放任何內存。它允許循環重用緩衝區。

+0

是否有關於分配什麼內存緩衝區的文檔? –

+0

@BenFulton請參閱http://en.cppreference.com/w/cpp/io/basic_stringstream。緩衝區位於'std :: string'內,因此名稱。 – Potatoswatter

相關問題