[Armadillo:04939] Re: Armadillo-210 の構造体について
Masakatsu Yamada
email@hidden
2010年 2月 2日 (火) 01:22:55 JST
花田様、溝渕様ありがとうございました。
山田と申します。
花田様、packedについて速度の影響は理解できました。
今回は、H8の25MHzで動作しているプログラムの移植ですので、
速度面ではそれほど問題が発生しないかと思っております。
それよりも、以下のサンプル構造体のように、構造体の構造体で配列を作成した場合に、
それぞれの単位でアライン(表現に自身かありません)が発生し、
本来3バイトのはずか12バイト確保されてしまいます。
構造体が複雑になった場合に更に多くのメモリが消費しますので、
メモリ空間を有効利用するために、packedを使用することにします。
struct test_b{
char bbb[1];
};
struct test_a{
char aaa[1];
struct test_b bb[2];
};
また、unionも使いたく、上記構造体を使用して以下のサンプルのように定義すると、
test.cccの割り当てアドレスは、test.aaの開始アドレスから3バイトとなり、
test.aa構造体は12バイト確保されているので、アラインされた内容を使用する事となり、
ケアレスミスによる異なるメモリを参照を避ける為にもpackedを使用することにします。
union test_c{
struct test_a aa;
char ccc[3];
};
static union test_c test;
>アラインメントが合っていないアクセスを行なうとARMでは例外が発生します。
溝渕様からのアドバイスのページを一通り読んで、僕なりになんとなく次のように解釈したのですが、
「packedする構造体の全ての要素がchar型だった場合、例外は発生しない」
この解釈で問題ないのでしょうか?
溝渕様お忙しい中、申し訳ありませんが更なるご教授願います。
armadillo メーリングリストの案内