[Armadillo:04938] Re: Armadillo-210 の構造体について
mizo
email@hidden
2010年 2月 1日 (月) 18:04:08 JST
溝渕です。
Masahiro Hanada wrote:
> 花田です。
>
>> ネットで調べたところ、以下のように __attribute__ ((packed))を構造体属性に付けると防止できる記載があったので、試したところサイズは適正になったのですが、
>> struct test{
>> char ChNo[1];
>> }w_mem __attribute__ ((packed));
>>
>> この対応は適切なのでしょうか?
>
> 目的とした動作をさせるためとしては、有効と思います。
> しかしながら、packedしない場合と比較して
> 速度面でデメリットが出る場合などもあります。
アラインメントが合っていないアクセスを行なうとARMでは例外が発生します。
例外の発生状態は、/proc/cpu/alignmentから確認することができ、
http://www.kumikomi.net/archives/2008/05/08hard2.php?page=1
にあるプログラムの実行前だと、
[a210]# cat /proc/cpu/alignment
User: 0
System: 0
Skipped: 0
Half: 0
Word: 0
Multi: 0
User faults: 0 (ignored)
のようになっているのが、実行後だと、
[a210]# cat /proc/cpu/alignment
User: 3
System: 0
Skipped: 0
Half: 0
Word: 0
Multi: 0
User faults: 0 (ignored)
のように3回例外が発生したことがわかります。なので少なくとも例外処理の分
は速度が落ちることになりますね。
以上です。
> なぜこうしたことが起こるかということは、C言語の仕様と同時に
> CPUのハードウェア、アーキテクチャについての理解が必要になります。
>
> 以下のサイトなどで詳しく説明されているので、参考にしてみてください。
> http://www5d.biglobe.ne.jp/~noocyte/Programming/Alignment.html
>
>
> "Masakatsu Yamada" <email@hidden> wrote:
>
>> 世話になります山田と申します。
>>
>> 早速ですが、構造体の実サイズについて、確認がございます。
>>
>> 構造体の配列を共有メモリに展開するプログラムのデバック中に、実サイズより多くの領域を使用している事が解かり
>> 以下のサンプル作りを実行すると、4バイトと表示しました。
>> struct test{
>> char ChNo[1];
>> }w_mem;
>>
>> int main(int argc, char* argv[])
>> {
>> printf("sizeof w_mem= %d\n",sizeof(w_mem));
>> return 0;
>> }
>>
>> ネットで調べたところ、以下のように __attribute__ ((packed))を構造体属性に付けると防止できる記載があったので、試したところサイズは適正になったのですが、
>> struct test{
>> char ChNo[1];
>> }w_mem __attribute__ ((packed));
>>
>> この対応は適切なのでしょうか?
>> お忙しい中申し訳ありませんが、ご教授ください。
>>
>> よろしくお願いします。
>>
>> _______________________________________________
>> armadillo mailing list
>> email@hidden
>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>
>
> ____________________________________________________
>
> 花田 政弘 (はなだ まさひろ)
>
> E-mail: email@hidden
> ____________________________________________________
>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>
armadillo メーリングリストの案内