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