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