我正在写一段对性能要求很高的代码,需要用多态的方式处理大量的对象。假设我有一个 A 类和一个派生自 A 的 B 类。我现在可以像这样创建 B:s 的 vector
vector<A*> a(n);
for(int i = 0; i < n; i++)
a[i] = new B();
但是如果 n 很大(在我的例子中是 10^6 或更多),这将需要对 new 进行非常多的调用,而且 n 个对象可能会分散在我的主内存中,从而导致缓存性能非常差.处理这种情况的正确方法是什么?我正在考虑做类似下面的事情,将所有对象放在一个连续的内存区域中。
B* b = new B[n];
vector<A*> a(n);
for(int i = 0; i < n; i++)
a[i] = b + i;
但一个问题是如果 b 不再可用(但我们仍然有 a),如何释放由 new B[n] 分配的内存。我刚刚了解到尝试
delete[] a[0];
这不是一个好主意...
最佳答案
如果您确定这些只会是 B
类型的对象,为什么不使用并行 vector :
vector<B> storage(n);
vector<A*> pointers(n);
for(int i = 0; i < n; i++)
pointers[i] = &storage[i];
关于c++ - 如何在 C++ 中编写缓存友好的多态代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5261027/