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
理解できたときは『うおっ!スゲー!』って思いました