我已经在各种Linux / Unix机器和gcc版本上进行了一些计时。一个STL向量的向量,声明为:
vector<vector<double> > matrix(n,vector<double>(n));
通过matrix[i][j]
访问的矩阵比声明为以下形式的数组访问速度慢5%至100%:
double *matrix = new double[n*n];
使用内联索引函数matrix[index(i,j)]
访问,其中index(i,j)
的值为i+n*j。其他没有STL的二维数组排列方式-一个包含n个指向每行开头的指针的数组,或在堆栈上定义整个常量大小的matrix[n][n]
- 与索引函数方法几乎以相同的速度运行。
最近的GCC版本(> 4.0)似乎能够在打开优化时将STL向量嵌套到非STL代码中,几乎达到相同的效率,但这在某种程度上取决于机器。
我希望尽可能使用STL,但必须选择最快的解决方案。有人有在GCC中优化STL的经验吗?