[Armadillo:08672] Re: アラインについて
watanabe
email@hidden
2013年 3月 14日 (木) 10:41:16 JST
渡辺です。
回答どうもありがとうございます。
結構ショックな内容ですね。
> とりあえず、変数に「aligned」という attributeを付けることで alignmentの
> 問題は回避できることまで確認しました。こちらで試したテストプログラムは、
> 以下です。
現在現象の発生している箇所は、alignedで回避出来ると思うのですが、
他の変数について、memcpyでエラーになっている可能性もあるのですよね。
armadillo上で/proc/cpu/alignmentを見てみたら、Userの所がカウントUP
されていました。
built-in memcpyだけを更新する方法があればbestなんでしょうけど。。。
(2013/03/13 21:13), Yasushi SHOJI wrote:
> At Wed, 13 Mar 2013 19:26:35 +0900,
> watanabe wrote:
>>
>> 以下のprgで問題が発生しました。
>>
>> char buf_B[13];
>> char buf_A[1024];
>> ・
>> ・
>> char test_buf[256];
>>
>> prg(){
>> ・
>> ・
>> memcpy(buf_A, test_buf, 100);
>> ・
>> ・
>>
>> memcpy()でbuf_Bの内容が壊れてしまいます。
>> buf_Aのアドレスがbuf_Bが13バイトのため、奇数になっていました。
>
> memcpyが動かないといろいろ問題が出るので、とても気になり調べてみました。
> しかし、結果として buf_A に相当するバッファのアドレスが奇数になることが
> 確認できました。
>
> とりあえず、変数に「aligned」という attributeを付けることで alignmentの
> 問題は回避できることまで確認しました。こちらで試したテストプログラムは、
> 以下です。
>
> gcc -Wall -Wextra -g a.c
>
> #include <stdio.h>
>
> char a[13];
> char b[1024] __attribute__((aligned(16)));
>
> int main()
> {
> char foo[13];
> char bar[1024];
>
> printf("a: %p\n", a);
> printf("b: %p\n", b);
> printf("foo: %p\n", foo);
> printf("bar: %p\n", bar);
>
> return 0;
> }
>
> 今回も問題は、もう1つ、「memcpyが奇数番地から始まるメモリ空間を扱えない」
> という問題もあります。こちらはどうやら gcc 4.3.2のバグのようです。
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46483
>
> built-in memcpy がダメみたいです。
>
armadillo メーリングリストの案内