数组与向量对比Boost ::数组

时间:2012-02-10 08:19:01

标签: c++ arrays performance vector multidimensional-array

我将分配和释放多个表示矩阵的动态多维数组,每一帧。

优先事项,即使以错误检查和手动内存管理为代价:

  1. 速度
  2. 占用内存不足
  3. 考虑到这些优先级,C风格的阵列是最佳选择吗?我知道这是一个经常被问到的问题,但我还没能找到适合我情况的明确答案。

4 个答案:

答案 0 :(得分:2)

如果你可以描述一组这些数组所需的最大内存量,这些数组将用于任何特定的“帧”(无论是什么),并且如果你一次只处理一个帧(换句话说,你将在一组数组上执行工作,然后在对另一组数组执行另一轮工作之前转储所有这些数组)然后通过从一个数组中分配数组,你可能会获得最佳性能。静态内存块,其大小适合您最大可能的工作集。

然后,您的数组分配可以是一个简单的池分配器,它从块的前面分割出一个数组的内存,并将块指针调整为刚好超过该分配,以便为下一个数组分配做好准备。当您完成对该组数组的工作时,可以通过“清理池”释放所有内容 - 只需将块指针重置为静态内存池的开头。

当然,既然你没有对如何完成你的工作做出太多细节,那么这种技术可能根本不适合(这可能就是为什么你还没有找到明确的答案 - 这样的答案取决于您正在执行的工作的具体特征。

答案 1 :(得分:0)

您向我们提供的关于您的问题的信息太少,无法给您一个好的答案。您的程序是应该只在一个平台上运行,还是应该与平台无关?时间效率对您的项目至关重要吗?如果是这样,也许使用'new'和'delete'对你来说太慢了,你需要求助于某些平台特定或第三方分配器。然后,动态分配的数组和std :: vector之间的选择应该没有区别。 或者你想在堆栈上分配数组?但是您可以在堆栈上创建的数组大小有限制。矩阵的大小是多少?

答案 2 :(得分:0)

std :: vectors通常和C-array一样好,但是如果你想要最终的裸骨速度并且你知道自己在做什么,那么你自己就无法管理C-array。

您需要考虑权衡取舍。 - 您愿意花多少时间来调试自定义代码? - 您愿意写多少自定义代码?

此外,阵列/矢量库经过了很好的测试,并针对速度和内存消耗进行了优化,您可能需要在决定之前使用各种编译器设置对它们进行基准测试(如果您愿意,请分享结果)。

答案 3 :(得分:0)

如果要表示矩阵,则一个单维数组已经比多维数组更好。数组已经是您处置时最简单的结构,因此更合适。

Vector的目的是实现动态数组,您可能不需要此功能,因为矩阵具有固定大小。