最適化…、おそろしい。

なんとなく、いろいろと最適化に挑戦してみた。勉強の為なのでネットで最適化を調べたりするのではなく、glibcソースコードと自作のコードのアセンブリを見ながら地力で最適化に挑戦した。

あれこれ試していて、ふとRHLinux右下の時計に目をやると3時22分。げぇ、7時間もたってる。晩飯も、水分も、いっさいとってない…。われながら素晴しい集中力だ。

最適化に関してはここで書くような、面白いものは分からなかった。強いて言えば、次の二つのコードは上の方が弱冠速かった(ほんとに少しだけだけど)。

/* sbuffer_tっていうのは文字列用の構造体です */
void
chrrep(sbuffer_t *sbuf, char src, char dst)
{
    unsigned char *p = (unsigned char *)sbuf->string;

    for (; *p != '\0'; ++p)
        if (*p == src)  *p = dst;
}

void
chrrep(sbuffer_t *sbuf, char src, char dst)
{
    char *p = sbuf->string;

    for (; *p != '\0'; ++p)
        if (*p == src) *p = dst;
}


そんなことよりもglibcのstrstr()のコードが理解できん。明日以降にでもなんとか解読するつもり。そのコードの先頭のコメントにこんな挑戦的な文章がある。

/*
 * My personal strstr() implementation that beats most other algorithms.
 * Until someone tells me otherwise, I assume that this is the
 * fastest implementation of strstr() in C.
 * I deliberately chose not to comment it.  You should have at least
 * as much fun trying to understand it, as I had to write it :-).
 *
 * Stephen R. van den Berg, berg@pool.informatik.rwth-aachen.de */

こら、Stephen、コメント書け。嘘です。面白いから良いのです。ちょっとした(いや、大掛かりな)クイズだと思って解かせて頂きます。