【发布时间】:2015-09-22 10:02:57
【问题描述】:
In glibc, malloc is implemented with arenas。
因此,例如,线程A中malloc和后来freed分配的内存可能不能被线程B中malloc的另一个调用使用,因为线程A和B可能在不同的arenas,不同的 arenas 维护着不同的堆和空闲内存列表。
说到 C++(也许还有 C++11,因为 C++11 有一个新标准),故事还是一样吗?
或者不同线程实际上共享同一个堆段和空闲内存列表,一个线程中的new可以先分配内存newed,然后deleted由另一个线程分配?
如果答案取决于实现,那么问题是它们在主要的 C++ 编译器中是如何实现的,例如 g++、MVC++、icc?
编辑
我认为这个问题是正确的,因为有时你会启动很多 线程,并且在每个线程中,您为大量对象动态分配/取消分配大量内存,并且您不希望应用程序的内存使用量高得离谱。
【问题讨论】:
-
C++ 没有说明分配函数是如何实现的,只说明它们必须产生什么结果。
-
在实践中
new调用malloc。但目前尚不清楚您希望如何处理这些信息。 -
你的意思是
new是由malloc实现的?这是标准化的吗? -
不要不要为 C++ 问题添加 C 标记!
-
为什么这被否决了?这不是关于 C++ 内存管理的有效问题吗?请解释!
标签: c++ multithreading c++11 memory-management dynamic-memory-allocation