パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

前置インクリメント(++x) よりも後置インクリメント(x++) のほうが高速?」記事へのコメント

  • b = a[i++] みたいな場合、
    まず a[i] の中身を取りに行く
    もう i は参照しちゃったので、i は変更可
    a[i] の中身を取りに行きながら、並行して i もインクリメント => 速い

    だけど、b = a[++] だと
    まず i をインクリメント
    インクリメントが終わらなきゃ、どこにアクセスしていいか分からない
    並行不可 => 遅い

    for( ほげ; ふが; i++) とか for( ほげ; ふが; ++i) の場合
    コンパイラが最適化しちゃうので、どっちも同じ

    結論: 習慣化する (≒考えずにやる) なら、後置で。

    • by Montague62 (1238) on 2015年04月19日 20時47分 (#2800212)
      ぐはっ

      だけど、b = a[++] だと

      これでは、意味不明ではないか orz
      正しくは当然
      b = a[++i]
      です。

      親コメント
      • by Anonymous Coward

        提唱者が言いたいのはそういうことだと思うし、この場合C++のクラスのインクリメントにかぎらず発生する話だよね。
        そもそも「ゲームプログラミングにおいて速度を要求される部分で発生する、
        インクリメント可能なインスタンスの前置/後置インクリメントの戻り値を使う場合」
        って要するにインデックスとかイテレータで単なる整数かポインタ一個だろう。
        コピーコストなんてそうそうかからない、というかCPUのレジスタ・リネーミングの狭間に消え去るレベル。

        条件にマッチしたオブジェクトIDを別の配列に放り込む、とかいうありがちな処理での配列インデックス変数とか。
        インクリメント演算子の戻り値を参照する処理の前後がストール気味な処理だと特にきつそう。

にわかな奴ほど語りたがる -- あるハッカー

処理中...