5.39 コンパイラによって生成される非境界整列型レジスタロード(LDR)命令

状況によってはそうすることが正しいため、 非境界整列型 LDR 命令がコンパイラによって意図的に生成される場合があります。

特に、ハーフワードをロードするための専用の命令がアーキテクチャでサポートされている場合でも、このようにしてメモリからハーフワードをロードする場合があります。
たとえば、__packed 構造体内の非境界整列型 short にアクセスする場合、コンパイラは必要なハーフワードをレジスタの上位半分にロードし、その後で下位半分にシフトします。この処理には 1 回のメモリアクセスしか必要とならないのに対し、 LDRB 命令を使用して同じ処理を行う場合には、2 回のメモリアクセスに加え、2 バイトをマージする命令が必要となります。
関連する概念
5.38 C および C++ コードでの非境界整列ポインタ
関連する参考文書
10.12 __packed
8.187 --unaligned_access、--no_unaligned_access
非機密扱いPDF file icon PDF 版ARM DUI0472LJ
Copyright © 2010-2015 ARM.All rights reserved.