如果我想分配一个类Foo
的数百万个对象,并且我希望内存和时间高效,我应该如何设计Foo
类?
显然,Foo
不应包含太多成员数据。
另外,我猜,它不应该使用虚函数?
Foo
从基类派生的成本是多少?来自几个基类?
还有其他技巧可以使数百万个 Foo
对象非常高效吗?
最佳答案
我认为关于为数百万个分配设计类没有什么可说的。是的,有明显的内存限制,所以如果您有固定数量的内存,这可能是您真正关心的问题,否则您将始终面临内存不足的风险。指向虚拟表的指针就是一个指针(在 32 位或 64 位体系结构上为 4 或 8 个字节),不确定多重继承中是否属于这种情况。调用虚拟函数有虚拟查找的开销(如果您最近没有使用它,还有额外的缓存未命中),但仅适用于虚拟函数,并且它们可能永远不会被内联。
如果有很多重复值,您可能还需要考虑使用单独的数据结构(享元模式)。为了提高效率,请确保您拥有轻量级(内联)构造函数和赋值运算符,尤其是如果您打算使用 STL vector 和类似内容。
这些都是非常简单的东西,所以现在我的真正建议是:
真正会扼杀你的内存管理的是如果你得到碎片,你可能突然有一堆内存,但仍然无处放置你的对象(没有足够的连续空间)。如果你有很多交错分配,这可能会变成一个真正的问题,所以你可能想考虑分配大块对象,将它们保存在池中并重用。或者使用自定义分配器(新运算符),在其中预分配一个内存块,该内存块是您的对象大小的倍数,并将其用于您的对象。
关于c++ - 如何设计适合数百万分配的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2397168/