操作堆上变量的效率问题?
如果需要操作大量的同类型小对象,例如struct Point{float x,y;},打算把它们放在vector中或者数组中。
一种选择是,这些小对象都是new出来的,那么就是std::vector<Point*>或者Point*数组
一种选择是,这些小对象都是值,那么就是std::vector<Point>或者Point数组
以上两种选择,当操作这些小对象时,效率有差别吗?只考虑访问元素的效率。
我的纠结在这里:
1. std::vector<Point>中的元素都直接是值,它们的实际数据在内存中应该是一个连续的数组。那么,依次访问这些连续数据,会不会在缓存命中方面具有优势?
2. std::vector<Point*>的Point是在不同时间new出来的,它们的实际数据可能是会在堆中乱七八糟分布的。那么,当我访问这些元素的时候,是否会比第一种方法慢一些呢?
在实际中,我应该采用哪种方式,可以让访问效率更高?
请有经验的老司机解惑。