アカウント名:
パスワード:
286時代は前置の方が早いと聞いていたので、前置が習慣になった。今時パソコン向けならどっちでもいいと思うけどね。
68000使いだと、デクリメントは前置、インクリメントは後置、ですね。
スタックの処理は通常、push時: スタックポインタをデクリメントしてから、スタックポインタの指すメモリに書き込みpop時: スタックポインタの指すメモリを読み込んでから、スタックポインタをインクリメントという処理になります。で、スタック処理を高速化するために、68000ではこれらの処理は一命令で処理できるようになっていました。
でもって、68000はスタックポインタも汎用レジスタの一つ、という直交性の高い設計なので、汎用レジスタに対しても前置デクリメントと後置インクリメントは一命令で処理できるからちょっと速い。#正確に言えば、アドレスレジスタについての話なので、「*--p」「*p++」が一命令処理。
286時代は単純にアセンブラコードで比較できましたよね。今はパイプラインにスレッドにマルチコアなんかを考えると単純比較出来無いので難しいですよ。
20年もの前の話ですが新卒で入った会社に凄腕エンジニアがいてその方がMicrosoft C/C++のPentium向け最適化をみて「人間がアセンブラでごりごりやる時代は終わったね」と言っていたのが印象に残っています。自分のスタイルにものすごく影響を与えた一言。
無駄は無駄なのだが、今でもそういう無駄な作業を一度は経験してみるのは無駄ではないプロセッサの性能が上がって今はインタプリタ言語で結構大掛かりな処理をする機会も多いが、そういうインタプリタのコードを人手で最適化をする時にその無駄な経験が役に立つ#インタプリタは遅いからと言って簡単に放り投げてしまう人もいるが、ほんのちょっとしたオプティマイズで劇的に速度が改善されることもあるのよ
JITコンパイラ含めてオプティマイザ自体は人間が作るわけですから一般的に無駄な作業を経験する必要がある領域があるのはわかります。ただそれはすべてのプログラマが経験する必要はないですよね。そういう根っこレベルを構築できる人がただコードを書くだけの人より評価されるようになってほしいと思ってます。(給与面への反映とか)
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
Stay hungry, Stay foolish. -- Steven Paul Jobs
intel者 (スコア:0)
286時代は前置の方が早いと聞いていたので、前置が習慣になった。
今時パソコン向けならどっちでもいいと思うけどね。
motorola者 (スコア:1)
68000使いだと、
デクリメントは前置、
インクリメントは後置、
ですね。
スタックの処理は通常、
push時: スタックポインタをデクリメントしてから、スタックポインタの指すメモリに書き込み
pop時: スタックポインタの指すメモリを読み込んでから、スタックポインタをインクリメント
という処理になります。
で、スタック処理を高速化するために、68000ではこれらの処理は一命令で処理できるようになっていました。
でもって、68000はスタックポインタも汎用レジスタの一つ、という直交性の高い設計なので、汎用レジスタに対しても前置デクリメントと後置インクリメントは一命令で処理できるからちょっと速い。
#正確に言えば、アドレスレジスタについての話なので、「*--p」「*p++」が一命令処理。
Re: (スコア:0)
286時代は単純にアセンブラコードで比較できましたよね。
今はパイプラインにスレッドにマルチコアなんかを考えると単純比較出来無いので難しいですよ。
Re: (スコア:0)
20年もの前の話ですが新卒で入った会社に凄腕エンジニアがいてその方がMicrosoft C/C++のPentium向け最適化をみて「人間がアセンブラでごりごりやる時代は終わったね」と言っていたのが印象に残っています。自分のスタイルにものすごく影響を与えた一言。
Re:intel者 (スコア:1)
無駄は無駄なのだが、今でもそういう無駄な作業を一度は経験してみるのは無駄ではない
プロセッサの性能が上がって今はインタプリタ言語で結構大掛かりな処理をする機会も多いが、そういうインタプリタのコードを人手で最適化をする時にその無駄な経験が役に立つ
#インタプリタは遅いからと言って簡単に放り投げてしまう人もいるが、ほんのちょっとしたオプティマイズで劇的に速度が改善されることもあるのよ
Re: (スコア:0)
JITコンパイラ含めてオプティマイザ自体は人間が作るわけですから一般的に無駄な作業を経験する必要がある領域があるのはわかります。
ただそれはすべてのプログラマが経験する必要はないですよね。
そういう根っこレベルを構築できる人がただコードを書くだけの人より評価されるようになってほしいと思ってます。(給与面への反映とか)
Re: (スコア:0)
コンパイルすると、++i は、inc
i++ は、addになって
クロック数はaddの方が多いので、++iで書けるところは、++iで書くように!
と先輩に教わった。
今は、コンパイラが最適化してくれそうなので、どっちでもいい。