如何设计适合数百万分配的类?

Fra*_*ank 7 c++ oop performance

如果我想分配一个类的数百万个对象Foo,并且我想要节省内存和时间,我应该如何设计Foo类?

显然,Foo不应该包含太多的成员数据.

另外,我猜,它不应该使用虚函数?

Foo从Base类派生成本有多高?从几个基类?

有没有其他提示使数百万Foo对象非常有效?

fal*_*tro 8

我不认为有关设计数百万分配的课程有很多话要说.是的,有明显的内存限制,所以如果你有一个固定数量的内存,这可能是你真正关心的问题,否则你将总是冒着内存不足的风险.指向虚拟表的指针就是指针(32位或64位架构上的4或8个字节),不确定这是多重继承的情况.调用虚函数会产生虚拟查找的开销(如果最近没有使用它,则额外的缓存未命中),但仅适用于虚函数,并且可能永远不会内联.

如果存在大量重复值,您可能还需要考虑使用单独的数据结构(flyweight模式).为了提高效率,请确保您拥有一个轻量级(内联)构造函数和赋值运算符,尤其是当您打算使用stl向量和类似向量时.

这些都是非常简单的东西,所以现在我的真实建议:

什么真的会破坏你的内存管理,如果你得到碎片,你可能会突然有一堆内存,但仍然无处放置你的对象(没有足够的连续空间).如果您有大量的交错分配,这可能会成为一个真正的问题,因此您可能希望研究分配大块对象,将它们保存在池中并重用.或者使用自定义分配器(new-operator),在其中预分配一个内存块,该内存块是对象大小的倍数,并将其用于对象.

  • 我同意.Flyweight +对象池和对象重用. (3认同)

Ces*_*Gon 4

看看享元模式。不过, GoF的书在解释该模式方面比维基百科做得更好。