数组 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的主要内容,如果未能解决你的问题,请参考以下文章

逻辑回归 vs 决策树 vs 支持向量机

逻辑回归 VS 决策树 VS 支持向量机

计算向量上正态分布的 cdf 的最快方法 - R::pnorm vs erfc vs?

犰狳 vs for 循环向量乘法

VS2012 中不允许使用 ... 进行向量<string> 初始化?

使用向量、类和继承;在VS中获取未解析的外部符号[重复]