数组 vs. 向量 vs. Boost::arrays
Posted
技术标签:
【中文标题】数组 vs. 向量 vs. Boost::arrays【英文标题】:Arrays vs. Vectors vs. Boost::arrays 【发布时间】:2012-02-10 08:19:00 【问题描述】:我将在每一帧中分配和释放许多表示矩阵的动态多维数组。
优先级,即使以错误检查和手动内存管理为代价:
-
速度
内存占用小
考虑到这些优先级,C 风格的数组是最佳选择吗?我知道这是一个经常被问到的问题,但我无法为我的情况找到明确的答案。
【问题讨论】:
【参考方案1】:如果您可以描述将用于任何特定“帧”(无论是什么)的一组数组所需的最大内存量,并且一次只处理一个帧(换句话说,您将在一组数组上执行工作,然后在对另一组数组执行另一轮工作之前转储所有这些数组)然后您可能会通过从您的大小适合您的最大工作集的静态内存块。
然后您的数组分配可以是一个简单的池分配器,它从块的前面为数组分配内存,并将块指针调整为刚好超过该分配,以便为下一个数组分配做好准备。当您完成该组数组的工作后,可以通过“清理池”来释放所有内容 - 只需将块指针重置为静态内存池的开头即可。
当然,由于您没有详细说明必须如何完成工作,因此这种技术可能根本不适合(这可能是您尚未找到明确答案的原因 - 这样的答案取决于您正在执行的工作的具体特征)。
【讨论】:
【参考方案2】:std::vectors 通常与 C 数组一样好,但如果您想要终极的准系统速度并且您知道自己在做什么,那么没有什么能比得上自己管理 C 数组了。
您必须考虑权衡取舍。 - 你愿意花多少时间调试自定义代码? - 你愿意写多少自定义代码?
此外,数组/向量库也经过了很好的测试,并针对速度和内存消耗进行了优化,您可能希望在决定之前使用各种编译器设置对其进行基准测试(如果您愿意,请分享结果)。
【讨论】:
【参考方案3】:您向我们提供的有关您的问题的信息太少,无法给您一个好的答案。您的程序应该只在一个平台上运行,还是应该独立于平台?时间效率对您的项目至关重要吗?如果是这样,也许使用“新”和“删除”对您来说太慢了,您需要求助于某些特定于平台的分配器或第三方分配器。然后,动态分配的数组和 std::vector 之间的选择应该没有区别。 或者你想在堆栈上分配数组?但是您可以在堆栈上创建的数组的大小是有限制的。矩阵的大小是多少?
【讨论】:
【参考方案4】:如果你想表示一个矩阵,一个单维数组已经比一个多维数组好。数组已经是您拥有的最简单的结构,因此它更合适。
Vector 的目的是实现一个动态数组,你可能不需要这个特性,因为矩阵是固定大小的。
【讨论】:
以上是关于数组 vs. 向量 vs. Boost::arrays的主要内容,如果未能解决你的问题,请参考以下文章
计算向量上正态分布的 cdf 的最快方法 - R::pnorm vs erfc vs?