小编Mar*_*tin的帖子

如何用C++编写缓存友好的多态代码?

我正在编写一段对性能有很高要求的代码,我需要以多态方式处理大量对象.假设我有一个A类和一个从A派生的B类.我现在可以创建一个B的向量:s像这样

vector<A*> a(n);
for(int i = 0; i < n; i++)
  a[i] = new B();
Run Code Online (Sandbox Code Playgroud)

但如果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;
Run Code Online (Sandbox Code Playgroud)

但一个问题是如果b不再可用,如何释放由新B [n]分配的内存(但我们仍然有).我刚刚学会了尝试

delete[] a[0];
Run Code Online (Sandbox Code Playgroud)

不是个好主意......

c++ polymorphism caching

10
推荐指数
2
解决办法
1366
查看次数

标签 统计

c++ ×1

caching ×1

polymorphism ×1