论数组不同访问方式的速度

106 阅读1分钟

如果在debug得到的结果会不一样,可能两者速度差不多,甚至二维的速度还会快一截

当然是在release 和开O2的情况下测试在连续下标访问下是一维数组完胜,大概一维比二维的速度在2:3左右

在随机数生成的下标访问也是一维数组加上指针偏移量完胜,本地测试平均结果是

two dim:1153
one dim:1032
#include<iostream>
#include<ctime>
#include<random>
using namespace std;
const int N = 1e4;
const int M = N * N;

int main() {
	srand(time(NULL));
	cout <<rand()<< endl;
	int** a = new int*[N];
	for (int i = 0; i < N; i++) {
		a[i] = new int[N];
	}

	int s = clock();
	for (int i = 0; i < N;i++) {
		for (int j = 0; j < N; j++) {
			a[rand() % N][i] = i + j;
		}
	}
	int e = clock();
	cout << "two dim:" << e - s << endl;

	for (int i = 0; i < N; i++) {
		delete[] a[i];
	}
	delete[] a;

	int* b = new int[M];
	s = clock();
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < N; j++) {
			b[N * (rand()%N) + i] = i + j;
		}
	}
	e = clock();
	cout << "one dim:" << e - s << endl;;
	delete[] b;
}

所以表示矩阵多用一维数组