[Armadillo:08671] Re: アラインについて

Yasushi SHOJI email@hidden
2013年 3月 13日 (水) 21:13:48 JST


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 がダメみたいです。
-- 
          yashi




armadillo メーリングリストの案内