在glibc中,malloc
是使用arenas实现的。例如,由线程A首先分配并稍后由free
释放的内存可能无法被线程B中的另一个malloc
调用使用,因为线程A和B可能在不同的arenas中,并且不同的arenas维护内存的不同堆和空闲列表。
当涉及到C++(也许还包括C++11,因为C++11有一个新标准),情况是否仍然相同?
或者不同的线程实际上共享相同的堆段和内存的空闲列表,而一个线程中的new
可以分配另一个线程中首先new
然后delete
的内存吗?
如果答案取决于实现,则问题是如何在主要的C++编译器中实现,例如g ++,MVC ++,icc?
编辑
我认为这个问题是有意义的,因为有时候你会启动很多线程,在每个线程中动态分配/释放大块内存来存储大量对象,而你不希望应用程序的内存使用量过高。