4.22 コンパイラの 8 バイト境界整列機能

コンパイラには、以下の 8 バイト境界整列機能があります。

  • ARM アーキテクチャ向けプロシージャコール標準(AAPCS)では、すべての外部インタフェースでスタックを 8 バイト境界で整列させる必要があります。コンパイラおよび C ライブラリでは、スタックの 8 バイト境界整列の状態が維持されます。また、デフォルトの C ライブラリメモリモデルでも、ヒープが 8 バイト境界で整列されます。
  • コードは、外部インタフェースで 8 バイト配列制約を必要とし、それを保持するようにコンパイルされます。
  • プロジェクトにアセンブリ言語ファイル、レガシーオブジェクト、またはライブラリがある場合、それらが 8 バイト境界のスタック整列を保持しているかどうかを確認し、必要に応じて修正する必要があります。
  • RVCT v2.0 以降および ARM コンパイラ 4.1 以降のバージョンでは、 ARM アーキテクチャ用アプリケーションバイナリインタフェース(AEABI)に準拠して、 double データ型と long long データ型が 8 バイト境界で整列されます。このため、ARMv5TE 以降では LDRD 命令と STRD 命令を効率的に使用できます。
  • malloc()realloc()、および calloc() のデフォルトの実装では、8 バイト境界で整列されたヒープが保持されます。
  • alloca() のデフォルトの実装では、8 バイト境界で整列されたメモリブロックが返されます。
関連情報
『Procedure Call Standard for the ARM Architecture』
Application Binary Interface (ABI) for the ARM Architecture
ロードとストア命令、要素と構造体の命令における境界調整の制約
alloca()
リンカによるセクションの境界調整
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.