In glibc, malloc
is implemented with arenas。 因此,例如,線程A中由malloc
和之後的free
d首先分配的存儲器有可能不能由線程B中的另一個malloc
調用使用,因爲線程A和B可能位於不同的場所中,並且不同的場合保持不同的堆和空閒的內存列表。在C++中,可以在一個線程中分配由另一個線程刪除的內存嗎?
當涉及到C++(也許C++ 11自C++ 11有一個新標準以來),故事仍然是一樣的嗎?
或者不同的線程實際上共享同一段堆和空閒內存列表,並且new
在一個線程中可以先分配內存new
ed和更高版本delete
d由另一個線程?
如果答案是依賴於實現的,那麼問題是它們如何在主要的C++編譯器中實現,比如g ++,MVC++,icc?
編輯
我認爲這個問題是在這個意義上有效的,有時你推出許多 線程,每個線程,動態分配/解除分配的內存大塊的大量的對象,而你不希望應用程序的內存使用率高得離譜。
C++沒有指定如何實現分配函數,只是他們必須產生什麼結果。 –
在實踐中'new'調用'malloc'。但目前還不清楚你希望如何處理這些信息。 –
你的意思是'new'是由'malloc'實現的嗎?這是標準化的嗎? – Allanqunzi