2次元配列のアクセス速度を測定したら、横読み、縦読みで速度差があって、newで確保した縦読みが最遅だ。2倍は違う。



#define _SECURE_SCL 0
#include <time.h>
#include <stdio.h>
#include <vector>
using namespace std;
unsigned int N = 1<<12;
unsigned int ROOP = 5;
void main() {
unsigned int n, r, sum, cl;
vector< vector<char> > vec(N, vector<char>(N));
for(n=0; n<N*N; n++) vec[n/N][n%N] = n%255;

cl=clock(); sum=0; for(r=0; r<ROOP; r++) for(n=0; n<N*N; n++) sum+=vec[n/N][n%N]; cl=clock()-cl;printf("cl=%d sum=%d\n", cl, sum);

cl=clock(); sum=0; for(r=0; r<ROOP; r++) for(n=0; n<N*N; n++) sum+=vec[n%N][n/N]; cl=clock()-cl;printf("cl=%d sum=%d\n", cl, sum);

vector< vector<char> >().swap(vec);

char **arr = new char *[N]; for(n=0; n<N; n++) arr[n] = new char [N]; for(n=0; n<N*N; n++) arr[n/N][n%N] = n%255;

cl=clock(); sum=0; for(r=0; r<ROOP; r++) for(n=0; n<N*N; n++) sum+=arr[n/N][n%N]; cl=clock()-cl;printf("cl=%d sum=%d\n", cl, sum);

cl=clock(); sum=0; for(r=0; r<ROOP; r++) for(n=0; n<N*N; n++) sum+=arr[n%N][n/N]; cl=clock()-cl;printf("cl=%d sum=%d\n", cl, sum); }