3

私は組み込みシステムのクラスを紹介していますが、整列メモリと非整列メモリの概念を理解するのに少し苦労しています。

私たちは主にアセンブリレベルのプログラミングを使用しています。

さて、これが私が現在理解していることです。Alignedは、すべてのデータが同じ長さであることをアセンブラーが使用する命令に指定するために使用されます。そのすべての単語の長さまたはハーフワードの長さまたはダブルワードの長さ。

非整列とは、データが特定の長さとして定義されていないことを意味します。

これは正しいです?アラインされていないvsアラインされていることの重要性は何ですか?あるものを別のものと比較して使用することで、いつ利益が得られるでしょうか?

初心者の質問をお詫びします。

4

2 に答える 2

5

4バイトアラインメントまたは32ビットアラインメントは、4バイトの整数倍であるアドレスを意味します。したがって、0x000、0x004、0x008、0x00Cなどです。これを表示する別の方法は、4 = 2の2乗であるため、下位2つのアドレスビットが必要です。位置合わせするためにゼロになります。8バイト整列、64ビット、8 = 2の3乗であるため、8バイト整列するには、下位3ビットがゼロである必要があります。2バイト、2の1乗であるため、偶数番号のアドレスは整列され、奇数番号のアドレスは2バイト転送では整列されません。バイトベースの転送は常に調整され、問題はありません。(2の0乗、0ビットはゼロである必要があります)。

すべてのシステムには、調整されていない転送に対してペナルティがあり、他のシステムよりもペナルティがあります。RISCプラットフォームのパフォーマンス機能の1つは、整列されていない転送を阻止または防止することです。そのため、MIPS、ARMなどはより強力なペナルティカテゴリに分類されます(すべてを一緒に防止するという点で)。ARMには、MIPSについてはよくわからない、回転や奇妙なことなしに非整列転送を可能にするメモリコントローラーが搭載されています。原則として、どのシステムを使用していても、整列されていない転送は避けてください。

于 2013-03-24T22:22:54.353 に答える
2

メモリアライメントとは、アドレス空間にデータを配置することです。

たとえば、最下位2ビットがクリアされている(つまり、4の倍数)アドレスは、32ビットワードシステムでワードアラインされます。同様に、最下位ビットがクリアされているアドレスは、ハーフワードで整列されます。一部のデータのアドレスが、命令、データバス、またはその他の要因によって必要とされる境界に整列されていない場合、そのアドレスは整列されていませ

一部のプロセッサ(ARMなど)では、データをデータのサイズに揃える必要があります(単語は単語に揃える必要がありますなど)。アラインされていないデータにアクセスしようとすると、データがローテーションされたり、動作が定義されなかったりする可能性があります。
他のプロセッサは、アラインされていないメモリアクセスを許可し、それらを内部で処理する場合がありますが、余分なメモリアクセスが原因でパフォーマンスが低下します。

于 2013-03-24T20:32:55.697 に答える