0

Android の 2 つのオペレーター内でパフォーマンスまたは消費電力の違いがあるかどうかを判断するために、事前インクリメントと事後インクリメントでいくつかのテストを行いました。

違いは見つかりませんでした。

基本的な論文はここでよく説明されています: http://www.roman10.net/pre-increment-and-post-increment/ (temp-var が生成されないため、pre の方が高速です)。

私はこれをc ++で学びました。このWebサイトはc実装を示していますが、Androidで実装がどのように行われるかを理解できませんでした(おそらく異なる)。

テストに使用されるコードは

int lPlotRangeCtr = 0;
    while (lPlotRangeCtr != mPlotRange){
        int lTMP = ++lPlotRangeCtr;
    }   

ご想像のとおり、これはプリインクリメント用のチャンクであり、ポストワーク用のチャンクでもあります。tamp var "lTMP" を使用して、演算子の戻り値が割り当てられ、コンパイラがインクリメント演算子を変換しないようにしました。

実装を見つける方法を教えてください。コンパイラは、承認されたときに、「lTMP」が読み取られないという演算子を変換できますか? そのようなステートメントはコンパイル中に自動的に削除されますか?

4

1 に答える 1

0

コンパイラは非常に賢く、変数をすぐに最適化しても驚かないでしょう。グローバル変数にして、揮発性としてマークすることをお勧めします。これにより、コンパイラは強制的に書き込みます。

そうは言っても、x++ と ++x のパフォーマンスが心配な場合は、パフォーマンスを細かく管理しすぎている可能性があります。ほとんどのパフォーマンスの向上はこれよりも高いレベルで達成され、この変更がプログラムに与える影響は、最も極端な場合を除いて無視できます。

于 2012-05-08T09:54:48.023 に答える