В glibc malloc
реализуется с арены.
Так, например, возможно, что память, сначала выделенная malloc
, а затем free
d в потоке A, не может использоваться другим вызовом malloc
в потоке B, поскольку потоки A и B могут быть в разных арены и разные арены поддерживают разные кучи и свободные списки памяти.
Когда дело доходит до С++ (возможно, также С++ 11, поскольку С++ 11 имеет новый стандарт), история остается прежней?
Или разные потоки фактически разделяют один и тот же сегмент кучи и свободный список памяти, а new
в одном потоке могут выделять память сначала new
ed, а затем delete
d другим потоком?
Если ответ зависит от реализации, тогда возникает вопрос, каким образом они реализуются в основных компиляторах С++, таких как g++, MVС++, icc?
ИЗМЕНИТЬ
Я думаю, что этот вопрос верен в том смысле, что иногда вы запускаете много потоков и в каждом потоке вы динамически выделяете/освобождаете большой кусок памяти для большого количества объектов, и вы не хотите, чтобы использование памяти вашим приложением было смехотворно высоким.