AAs of struct or array

Ali Çehreli acehreli at yahoo.com
Thu May 27 11:21:29 PDT 2010


bearophile wrote:
> I have noticed a significant speed difference between foo1 and foo2 (D2 code):
> 
> import std.c.stdio: printf;
> 
> int foo1(int x, int y) {
>     static int[int[2]] cache;
>     int[2] args = [x, y];
>     cache[args] = x;

Most of it comes from the use of that temporary. -O doesn't help either.

This makes foo1 only slightly slower than foo2:

//     int[2] args = [x, y];
     cache[[x, y]] = x;

>     return x;
> }
> 
> int foo2(int x, int y) {
>     static struct Pair { int x, y; }
>     static int[Pair] cache;
>     Pair args = Pair(x, y);
>     cache[args] = x;
>     return x;
> }
> 
> void main() {
>     enum int N = 600;
>     int tot;
>     foreach (x; 1 .. N)
>         foreach (y; 1 .. N)
>             tot += foo2(x, y); // use foo1 or foo2 here
>     printf("%d\n", tot);
> }
> 
> 
> Bye,
> bearophile

Ali


More information about the Digitalmars-d mailing list