TOP > eMbedded Visual C++ Tips > 第2回 ALIGNって何?(その2 〜UNALIGNED〜)
eMbedded Visual C++ Tips 第2回 ALIGNって何?(その2 〜UNALIGNED〜)■ Datatype Misalignment例外前回、XScale等RISC CPUでは奇数アドレスからのマルチバイトデータのアクセスはできないと書いた。ハードウェア的にはこれはどうやってもできないのだが、eMbedded Visual C++ではこれをソフトウェアで見かけ上実現するための魔法の言葉(そんなに大げさなものでもないか)が用意されている。
■ アラインされていないことを宣言する -UNALIGNED-これを回避する方法はいくつかあるが、最も簡単な方法は*p宣言時にUNALIGNEDキーワードを付加して、データがハードウェア固有のバイト境界にアラインされていないことをコンパイラに教えてやれば動作するようになる。(UNALIGNEDの代わりに__unalignedでも良い。)
ただし、UNALIGNEDキーワードを付加する方法も前回の構造体のパックと同様、コンパイラが特別なコードを挿入して見かけ上奇数アドレスからのデータアクセスを実現しているだけなので、速度を要求される処理の場合は注意が必要だ。 x86ではこのようなアクセスもハードウェアでサポートされているため問題なく行えるが、レジスタへのロード時にメモリアクセスが2回に分かれたり等速度は低下する可能性がある。このようなことを頭に入れながらWindows CEプログラミングを楽しもう! (2003/11/24) Copyright(C) 2003 モバイル開発系(K) All rights reserved. [Home] |