[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 メーリングリストの案内