有效地分配许多短暂的小物件

Fir*_*cer 10 c++ multithreading memory-management visual-studio-2008

我有一个小类(32位系统上16个字节),我需要动态分配.在大多数情况下,任何给定实例的生命周期都非常短.某些实例也可以跨线程边界传递.

做了一些分析后,我发现我的程序似乎花费了更多的时间来分配和解除分配,而不是实际花费使用它们所以我想用更高效的东西替换默认的new和delete.

对于一个大型对象(db连接,因为它发生,构造而不是分配是昂贵的),我已经在使用池系统,但是它涉及一个用于存储"free"对象的列表,还有一个用于线程安全的互斥锁.在互斥锁和列表之间,它实际上比小对象的基本新建/删除更糟糕.

我在Google上发现了许多小对象分配器,但它们似乎使用的是全局/静态池,它不是以线程安全的方式使用,使它们不适合我的用途:(

我有哪些其他选项可以有效地管理这些小对象?

Mar*_*ins 0

您可以确保您使用的是低碎片堆。它在 Vista 及更高版本中默认打开,但我认为早期操作系统并非如此。这会对小对象的分配速度产生很大的影响。