C++ 性能小测 1 二维数组的遍历效率

瑞星  金牌会员 | 2022-9-16 17:23:02 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 877|帖子 877|积分 2631

遍历二维数组时,常规思路是使用一个嵌套循环。一方面,由于 CPU 使用了分支预测技术,因此通常将循环次数最多循环的放在最内层。另一方面,由于二维数组是按行存储的,因此遍历二维数组时,一般将列循环放在内层。但当数组的行数rowSize大于数组的列数columnSize时,这两条规律无法同时得到满足。下面通过一个小测试来判断这个时候哪种方式效率更高。
[code]#include #include using namespace std;const int rowSize = 50000;const int columnSize = 2000;const int testCount = 100;int main(){    //生成大型二维数组    int** arr = new int * [rowSize];    for (int i = 0; i < rowSize; i++)    {        arr = new int[columnSize];        for (int j = 0; j < columnSize; j++)        {            arr[j] = rand() % 5;        }    }    //声明工具变量    double meanTime = 0;    long double sum = 0;    clock_t start, end, time;    //将列循环放在内层,进行多次测试    time = 0;    for (int k = 0; k < testCount; ++k)    {        sum = 0;        start = clock();        for (int i = 0; i < rowSize; ++i)        {            for (int j = 0; j < columnSize; ++j)            {                sum += arr[j];            }        }        end = clock();        sum = sum / (rowSize * columnSize);        time += end - start;    }    meanTime = (double) time / testCount / CLOCKS_PER_SEC;    cout
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表