1

スタック アラインメントの問題に悩まされた後、ヒープも 8 オクテット境界にアラインする必要があるかどうか疑問に思い始めました。

ARM Cortex EABI は、外部関数へのすべての呼び出しについて、スタックを 8 アラインする必要があると述べています。ヒープの配置に制限があるかどうかについての情報は見つかりませんでした。ヒープも 8 でアラインする必要があるという提案がいくつか出回っているようですが、公開されているほとんどのメモリ管理コードでは 4 でアラインされています。

ヒープとスタックの間でコピーする場合、整列は保持されないため、スタック整列の要件は (ワード境界が尊重される限り) ヒープ整列とは何の関係もありません。また、8 オクテット幅の項目を指すときに、コンパイラが 8 アラインされたポインターに制限されるべき理由が思いつきません。

ヒープには4オクテットのアライメントで十分であることを誰でも確認できますか?

4

1 に答える 1

1

Cortex-M プロセッサの特定のケースでは、Cortex-M にはワード アライメントよりも厳密なアライメント要件を持つ命令がないため、ヒープ割り当てにはワード アライメントで十分です。

Cortex-M4 の場合、これはCortex-M4 Devices Generic User Guideセクション 3.3.5で宣言されています。

アライン アクセスとは、ワード、デュアル ワード、またはマルチ ワード アクセスにワード アライン アドレスを使用する操作、またはハーフワード アクセスにハーフワード アライン アドレスを使用する操作です。バイト アクセスは常に整列されます。

つまり、LDRD/STRD (デュアル ワード) および LDM/STM (マルチ ワード アクセス) 命令の場合でも、通常はコンパイラが 64 ビット データ型に使用しますが、アライン アクセスの要件はワード アラインのみです。

于 2015-03-07T20:13:34.383 に答える