【发布时间】:2011-06-19 01:24:09
【问题描述】:
我正在使用 8 核处理器,并且正在使用 Boost 线程来运行大型程序。 从逻辑上讲,程序可以分成组,每个组由一个线程运行。 在每个组中,一些类调用“new”操作符总共 10000 次。 Rational Quantify 表明,“新”内存分配在程序运行时占用了最大处理时间,并减慢了整个程序的速度。
我可以加快系统速度的一种方法是在每个“组”中使用线程,这样 10000 个内存分配可以并行发生。
我不清楚这里将如何管理内存分配。操作系统调度器真的能够并行分配内存吗?
【问题讨论】:
-
感谢您分析您的应用程序。
-
@Everyone:好的,所以“堆争用”是在这方面寻找的正确短语。显然 glibc v2 以后并行处理 malloc citi.umich.edu/projects/linux-scalability/reports/malloc.html 但与 free() 的争用将(可能)仅从版本 2.2.4 开始处理 bozemanpass.com/info/linux/malloc/Linux_Heap_Contention.html。我想知道这是否意味着像 Hoard 这样的库会变得多余。
标签: c++ multithreading memory-management new-operator boost-thread