C++第3版
分厚い。重い。
練習問題にあったソース
void send(int* to, int *from, int count)
{
int n = (count+7) / 8;
switch (count%8) {
case 0: do { *to++ = *from++;
case 7: *to++ = *from++;
case 6: *to++ = *from++;
case 5: *to++ = *from++;
case 4: *to++ = *from++;
case 3: *to++ = *from++;
case 2: *to++ = *from++;
case 1: *to++ = *from++;
} while (--n > 0);
}
}
なにをしてるでしょうか?って、fromからtoにcountだけデータをコピーしてるんだね
さて、「このようなものを書く理由はどのようなものか?」という質問があるわけですよ。
ぶっちゃけもっと簡単にかけるし、わっかんないなーなんて思ったからネットで調べました。
どうやら初めの8の除算などで、変数の減算と比較を1/8にしているそうです。
じゃあ速くなったのか!?と思って自分の書いた簡単なsend関数をつかった実測をしてみるわけなのですよ
void my_send(int* to, int *from, int count)
{
while (count-- > 0)
*to++ = *from++;
}
結果!
あんまり変わらない!(むしろ遅いときもある)
ダメじゃーん!
でもswitchの中であんな風にdo whileを使うのは初めてみた。
面白いアイディアだと思うw
理解できたときは『うおっ!スゲー!』って思いました