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