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