我的工具是Linux,gcc和pthreads。当我的程序从多个线程调用new/delete时,并且当堆发生争用时,将创建'arena'(请参阅以下链接,获取引用http://www.bozemanpass.com/info/linux/malloc/Linux_Heap_Contention.html)。我的程序全天候(24x7)运行,但2周后仍偶尔创建竞技场。我认为最终可能会出现与线程一样多的竞技场。 ps(1)显示惊人的内存消耗,但我怀疑实际上只有一小部分被映射。

空荡荡的竞技场的“开销”是什么? (与将所有分配限制在传统堆中相比,每个竞技场使用的内存要多多少?)

有什么方法可以在n个竞技场之前强制创建吗?有什么方法可以迫使空荡荡的竞技场毁灭吗?

最佳答案

struct malloc_state(又名mstate,又名竞技场描述符)具有大小

glibc-2.2
(256 + 18)* 4字节对于32位模式=〜1 KB,对于64位模式为〜2 KB。
glibc-2.3
(256 + 256/32 + 11 + NFASTBINS)* 4 =〜1.1-1.2 KB(32位)和2.4-2.5 KB(64位)

请参阅glibc-x.x.x/malloc/malloc.c文件,结构malloc_state

关于c - 空堆竞技场的开销,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2171326/

10-10 12:46