function vs delegate
http://pc5.2ch.net/test/read.cgi/tech/1091185216/778-
quicksort でこの差が出るのなら function と delegate は結構パフォーマンスが違うんじゃないかと思った。実際使う際は気にならない、という意味で quicksort だったのかもしれないけど、単体で見ないとわからんこともあるはず。この quicksort データの準備に半分の時間使ってるし。
> ./dele_fun 613 # function 2088 # delegate method 986 # delegate inner function
まぁこんなとこか。アセンブラ読む必要もなさげ。ちなみに function と関数ポインタは等速。最適化は -O を使用。 -O が無いと inner function の delegate が function と等しくなった。
> ./a.out 988 2262 54496
こっちはアセンブラ読むなりなんなりした方が良さげ。以下ソース。
private import std.date;
int i;
int func() { return i+2; }
class C {
int i;
int func() { return i+2; };
void run1() {
int function() fp = &.func;
d_time start = getUTCtime();
for (int i = 0; i < 10000; i++) {
for (int j = 0; j < 10000; j++) {
assert(2 == fp());
}
}
printf("%d\n", cast(int)(getUTCtime()-start));
}
void run2() {
int delegate() de = &func;
d_time start = getUTCtime();
for (int i = 0; i < 10000; i++) {
for (int j = 0; j < 10000; j++) {
assert(2 == de());
}
}
printf("%d\n", cast(int)(getUTCtime()-start));
}
void run3() {
int i = 1;
int delegate() de = delegate int() { return i+2; };
d_time start = getUTCtime();
for (int i = 0; i < 10000; i++) {
for (int j = 0; j < 10000; j++) {
assert(3 == de());
}
}
printf("%d\n", cast(int)(getUTCtime()-start));
}
}
int main() {
C c = new C();
c.run1();
c.run2();
c.run3();
return 0;
}