我正在编写简单的模板,矢量样式的类,并且想知道哪种方法更好-将元素收集为普通数组还是指针数组?第二种方法应确保更快地复制数组,但需要更多的指针存储空间。
我对吗?还有其他性能后果吗?
我正在编写简单的模板,矢量样式的类,并且想知道哪种方法更好-将元素收集为普通数组还是指针数组?
所有std::vector<>
实现都选择一个“普通数组”-元素的连续分配。在考虑性能之前,请考虑所需的语义。
使用指针会使您的实现复杂化。同样,这将破坏std::vector<>
保证元素连续分配的保证。
使用指针意味着更多的簿记。同样,它将需要其他分配来维护和间接分配。尽管使用基础指针具有一些优点,但是简单类型的简单结构可以更快地复制。通常,您应该将连续分配作为默认设置。如果您发现使用指针有很大的好处,请在另一种类型中使用它。
还要注意,向量操作(如移动和交换)只能通过将指针交换到数组来实现,因此您可以提高某些操作的指针速度。
现有的矢量设计是一个很好的起点。
连续分配的最大好处是在缓存上很容易。内存读写比将元素的内存分散到各处要快得多。
另一点:指针的大小可以大于一个值/元素。在这种情况下,使用指针可以增加内存需求。
第二种方法应确保更快地复制数组,但需要更多的指针存储空间。
为何如此?您仍然需要复制元素并跟踪其生命周期以获取适当的语义。在这种情况下,shared_ptr
如果您打算共享向量的元素,则简单的向量s是值得考虑的方法。通常,shared_ptr
应该很少使用它,因此您可能需要重新考虑您的设计。使用std::vector<>
的设计作为起点绝对没有错,因为它是一个很好的默认设置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句