new和delete处理多线程问题

Avi*_*ash 6 c++ multithreading new-operator

我正在读一本书高效的C++:性能编程技术作者如下关于全局new和delete运算符:

它们在进程上下文中管理内存,并且由于进程可能会生成多个线程,new()并且delete()必须能够在多线程环境中运行.此外,内存请求的大小可能因请求而异.

第6章中单线程内存池.

这是真的?我认为C++没有多线程环境的概念,程序员需要处理的是通过使用某种互斥方式.

sha*_*oth 7

这将取决于实施.例如,Visual C++运行时在早期版本中同时具有单线程和多线程版本的堆,但从Visual C++ 2005开始它只有一个多线程版本.这篇MSDN文章有一个很好的摘要表.

当使用多线程堆时,对内存分配和释放的调用是线程安全的,代价是额外的开销.