配列の速さ

前回と同じようにD言語の配列の速度を調べる。
D言語の配列のソースは次、


import std.cstream;
import std.date;

const int n = 256;

struct pair {
int first;
int second;
}

void main() {
d_time t0 = getUTCtime();

pair[n] m;
for(int i = 0; i < n; i++) {
m[i].first = i;
m[i].second = (i + 1) % n;
}

int r = 0;
for(int i = 0; i < 10000000; i++) {
for(int k = 0; k < n; k++) {
if(m[k].first == r) {
r = m[k].second;
break;
}
}
}

d_time t1 = getUTCtime();

dout.writefln(r);
dout.writefln(t1 - t0, "ms");
}

これと、C++の配列、vector、vecotorでatを使ったときと比較する。


// at
for(int i = 0; i < 10000000; i++) {
for(int k = 0; k < n; k++) {
if(m.at(k).first == r) {
r = m.at(k).second;
break;
}
}
}

D言語の配列はatを使ったときより少し遅いくらい。
境界値チェックをしているだろうから、これくらい遅くて当然だろう。
やはりこのあたりはC/C++を使わないといけないのか。