C および C++ コードでの非境界整列データアクセス

命令を使用してメモリ内の非境界整列データに直接アクセスできる CISC アーキテクチャから従来のコードを移植する場合など、メモリ内の非境界列データにアクセスすることが必要となる場合があります。

ARMv4 アーキテクチャ、ARMv5 アーキテクチャ、および ARMv6 アーキテクチャ(一部の設定)では、メモリ内の非境界整列データにアクセスする際に、予期しない結果が返されないように注意が必要です。例えば、C または C++ のソースコード内のワードを読み出すために従来のポインタを使用する場合、ARM コンパイラは、LDR 命令を使用してそのワードを読み出すアセンブリ言語コードを生成します。この命令は、アドレスが 4 の倍数である場合(例えばワード境界上にある場合)には、期待どおりに実行されます。しかし、アドレスが 4 の倍数でない場合、LDR 命令では本来の非境界整列ワードのロードが実行されず、ローテートされた結果が返されます。通常、このローテートはプログラマの予想に反する処理です。

ARMv6 以降のアーキテクチャでは、非境界整列アクセスは完全にサポートされています。

Show/hide関連項目

Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0472EJ
Non-ConfidentialID081711