(toppers-users 2533) Re: コンフィギュレータのアライメント

takaya_kakizaki @ gmx.yamaha.com takaya_kakizaki @ gmx.yamaha.com
2006年 9月 13日 (水) 17:20:27 JST


柿崎です。

そうなのですか、知りませんでした。厄介ですね。
となると、処理系によらずアライメントを保証するための
指定というのは存在しないのでしょうか。

となるとコンフィギュレータを処理系ごとに用意する必要が
出てきそうで嫌ですね。
short array[3] __attribute__ ((aligned));

のようにアラインメント因子を指定しないと、
GCC は、宣言された変数やフィールドに、読者のコンパイルの
ターゲットである機種で任意のデータ型に対して使われる最大のアラインメントを
自動的に設定する。

とあるのですが、こちらはどうなのでしょう。





Masaki Muranaka <monamour @ monaka.org> 
2006/09/13 16:41
users @ toppers.jp へ
返信してください


宛先
users @ toppers.jp
cc

件名
(toppers-users 2531) Re: コンフィギュレータのアライメント






こんにちは.

On 2006/09/13, at 13:37, takaya_kakizaki @ gmx.yamaha.com wrote:
> 4バイトアライメントを保証したいなら
>
> static VP __attribute__((aligned(4)))

GCCにおけるaligned属性は,
「少なくとも(at least) nバイトで」アラインメントする
という指定です.4を指定したとして,きっちり4バイトで
整列してくれる保証はどこにもありません.
(6でアラインしたとしても処理系のバグとはいえない)

実際に,型Tの配列t[]をaligned(n)で整列したとき,
特定条件で, t[i]のアドレスが c + n * i (ここで,c < 
n)に
なる実装が存在します.例えばMIPS64系など.

上手に使えば使えなくもないと思いますが,
「保証したいなら」という主張の文脈では,
怖くて使えないと思いますよ.

--
from もなか