6

バイトのすべてのインスタンスを整数に置き換えると、nds アプリケーションの動作が少し速くなることに気付きました。オンラインのすべての例では、可能な限り u8/u16 インスタンスを配置しています。これが事実である理由について特定の理由はありますか?

4

2 に答える 2

16

ニンテンドーDSが利用するメインプロセッサは、32ビットプロセッサであるARM9です。

参考: http: //en.wikipedia.org/wiki/ARM9

                    

通常、CPU はワード サイズ(この場合は 32 ビット) で操作を実行します。操作によっては、バイトを整数に、またはその逆に変換する必要があるため、プロセッサにさらに負荷がかかる場合があります。この変換と、32 ビット整数以外の値に対する命令が不足している可能性があるため、速度が低下している可能性があります。

于 2012-07-09T19:28:26.037 に答える
7

Daniel Li が言ったことを補足すると、ARM プラットフォームでのメモリ アクセスはワード アラインされている必要があります。つまり、メモリ フェッチは 32 ビットの倍数でなければなりません。メモリからバイト変数をフェッチすることは、関連するバイトを含むワード全体をフェッチし、必要なビット単位の操作を実行してプロセッサレジスタの最下位ビットに収めることを意味します。

これらの追加の命令は、変数の実際の配置を知っている場合、コンパイラによって自動的に発行されます。

于 2012-07-09T19:42:26.360 に答える