前置インクリメント(++x) よりも後置インクリメント(x++) のほうが高速?
2015年4月19日 20:27
insiderman 曰く、 C/C++には「++x」(前置インクリメント) や「x++」(後置インクリメント) のようなインクリメント演算子がある。前者はxをインクリメントしてからその値を返すのに対し、後者はxの値をコピーしてからxをインクリメントし、コピーした値を返す。後置インクリメントは値をコピーする分遅いと言われていたそうなのだが、これとは逆の主張が話題になっているそうだ(闇夜のC++)。
これによると、前置インクリメントはインクリメント処理が終わるまで値を返せないのに対し、後置インクリメントはインクリメント処理が終わる前に値を返すことができる。そのため並列処理が可能になるなどのメリットがあるという。ただし、オブジェクトをコピーするコストについては議論されていないとのことなので、コピーに必要なコストが大きい場合は逆に処理が遅くなる可能性もある。
そもそもタレコミ子は前置インクリメントと後置インクリメントの処理の違いについては把握していたが、処理コストの違いについては知らなかったので非常に勉強になった(言われれば確かにそうだと理解できるのだが)。
記事で話題となっている書籍の英語版「Game Engine Architecture, Second Edition」は、該当部分をGoogleブックスで閲覧できるので、参照してほしい。
スラッシュドットのコメントを読む | デベロッパーセクション | プログラミング | デベロッパー
関連ストーリー:
コードを特に良いものとするのは何? 2015年03月29日
メモリー上で処理するよりもディスクに直接書き込む方が高速? 2015年03月28日
リファクタリングしてもコードの質は改善されないという実験結果 2015年03月05日
C言語の開発者によるgoto文の使い方を対象とした実証研究の結果、「goto文は無害だと考えられる」 2015年02月15日
Javaで書かれたソースコードの大部分は冗長? 2015年02月14日
再帰呼び出し、よく使う?使わない? 2015年02月11日