All*_*nzi 10 c++ multithreading memory-management dynamic-memory-allocation c++11
在glibc中,malloc用arenas实现.因此,例如,由于线程A和B可能位于不同的场所,并且不同的场所保持不同的堆,并且线程A中的另一个调用不能使用线程A中首先分配的内存malloc和后来的内存.免费的记忆清单.freemalloc
谈到C++(也许是C++ 11,因为C++ 11有一个新标准),故事是否仍然相同?
或者不同的线程实际上共享相同的堆段和内存空闲列表,并且new在一个线程中可以先分配内存,new然后再delete由另一个线程分配d?
如果答案是依赖于实现的,那么问题是它们是如何在主要的C++编译器中实现的,例如g ++,MVC++,icc?
编辑
我认为这个问题在某种意义上是有效的,有时你会启动许多线程,并且在每个线程中你为大量对象动态分配/释放大量内存,并且你不希望你的应用程序使用内存高得离谱.
这:
不同的线程实际上共享同一段堆和内存的空闲列表,一个线程中的new可以分配另一个线程先new然后删除的内存
线程的目的 - 共享内存空间。如果你不需要这个功能,你最好使用流程。
| 归档时间: |
|
| 查看次数: |
1949 次 |
| 最近记录: |