アカウント名:
パスワード:
b = a[i++] みたいな場合、 まず a[i] の中身を取りに行く もう i は参照しちゃったので、i は変更可 a[i] の中身を取りに行きながら、並行して i もインクリメント => 速い
だけど、b = a[++] だと まず i をインクリメント インクリメントが終わらなきゃ、どこにアクセスしていいか分からない 並行不可 => 遅い
for( ほげ; ふが; i++) とか for( ほげ; ふが; ++i) の場合 コンパイラが最適化しちゃうので、どっちも同じ
結論: 習慣化する (≒考えずにやる) なら、後置で。
だけど、b = a[++] だと
これでは、意味不明ではないか orz 正しくは当然 b = a[++i] です。
提唱者が言いたいのはそういうことだと思うし、この場合C++のクラスのインクリメントにかぎらず発生する話だよね。そもそも「ゲームプログラミングにおいて速度を要求される部分で発生する、インクリメント可能なインスタンスの前置/後置インクリメントの戻り値を使う場合」って要するにインデックスとかイテレータで単なる整数かポインタ一個だろう。コピーコストなんてそうそうかからない、というかCPUのレジスタ・リネーミングの狭間に消え去るレベル。
条件にマッチしたオブジェクトIDを別の配列に放り込む、とかいうありがちな処理での配列インデックス変数とか。インクリメント演算子の戻り値を参照する処理の前後がストール気味な処理だと特にきつそう。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
アレゲは一日にしてならず -- アレゲ研究家
こういうこと? (スコア:2)
b = a[i++] みたいな場合、
まず a[i] の中身を取りに行く
もう i は参照しちゃったので、i は変更可
a[i] の中身を取りに行きながら、並行して i もインクリメント => 速い
だけど、b = a[++] だと
まず i をインクリメント
インクリメントが終わらなきゃ、どこにアクセスしていいか分からない
並行不可 => 遅い
for( ほげ; ふが; i++) とか for( ほげ; ふが; ++i) の場合
コンパイラが最適化しちゃうので、どっちも同じ
結論: 習慣化する (≒考えずにやる) なら、後置で。
Re:こういうこと? (スコア:2)
だけど、b = a[++] だと
これでは、意味不明ではないか orz
正しくは当然
b = a[++i]
です。
Re: (スコア:0)
提唱者が言いたいのはそういうことだと思うし、この場合C++のクラスのインクリメントにかぎらず発生する話だよね。
そもそも「ゲームプログラミングにおいて速度を要求される部分で発生する、
インクリメント可能なインスタンスの前置/後置インクリメントの戻り値を使う場合」
って要するにインデックスとかイテレータで単なる整数かポインタ一個だろう。
コピーコストなんてそうそうかからない、というかCPUのレジスタ・リネーミングの狭間に消え去るレベル。
条件にマッチしたオブジェクトIDを別の配列に放り込む、とかいうありがちな処理での配列インデックス変数とか。
インクリメント演算子の戻り値を参照する処理の前後がストール気味な処理だと特にきつそう。