【发布时间】:2015-12-27 20:27:01
【问题描述】:
我最近从 matlab 切换到 c++ 以更快地运行模拟,但它仍然运行缓慢。我非常肯定在内存使用方面还有很多需要改进的地方。
考虑以下代码,它显示了我在模拟中使用的两个数组/向量声明的示例。
一个具有已知的固定长度 (array01),另一个具有未知长度 (array02),在运行期间会发生变化。
这里的问题是在内存使用和性能方面声明变量(对于两种数组类型)的最佳/正确/有效方式是什么。
# include <iostream>
# include <vector>
# include <ctime>
# include <algorithm>
using namespace std;
const int n = 1000;
const int m= 100000;
int main()
{
srand((unsigned)time(NULL));
vector <double> array02;
vector <vector<double>> Array01(n,m);
for (unsigned int i=0; i<n; i++)
{
for (unsigned int j=0; j<m;j++)
{
array02.clear();
rr = rand() % 10;
for (unsigned int l = 0 ; l<rr <l++)
{
array02.pushback(l);
}
// perform some calculation with array01 and array02
}
}
}
【问题讨论】:
-
reserve() 当您对所需的总大小有相当精确的估计时才有意义。在这种情况下,我认为您知道 size.so,vector.reserve() 应该有助于加快速度搞事情。
-
在对需要优化的内容进行任何推测之前,先分析您的代码。顺便说一句,静态数组就足够了。
-
我会先分析代码。
-
en.wikipedia.org/wiki/Profiling_(computer_programming)。您的开发环境应该有一个内置的分析器。这是遇到性能问题时必备的工具。
-
@jarhead,分析器:stackoverflow.com/questions/67554/…。但是您的代码不会很快,因为它平均执行十亿次操作。您应该研究降低代码算法复杂性的可能性。此外,
rand()函数非常慢且不够随机,请参阅stackoverflow.com/a/31091422/1915854
标签: c++ memory-management