[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
(toppers-users 2533) Re: コンフィギュレータのアライメント
- To: users at toppers jp
- From: takaya_kakizaki at gmx yamaha com
- Date: Wed, 13 Sep 2006 17:20:27 +0900
柿崎です。
そうなのですか、知りませんでした。厄介ですね。
となると、処理系によらずアライメントを保証するための
指定というのは存在しないのでしょうか。
となるとコンフィギュレータを処理系ごとに用意する必要が
出てきそうで嫌ですね。
short array[3] __attribute__ ((aligned));
のようにアラインメント因子を指定しないと、
GCC は、宣言された変数やフィールドに、読者のコンパイルの
ターゲットである機種で任意のデータ型に対して使われる最大のアラインメントを
自動的に設定する。
とあるのですが、こちらはどうなのでしょう。
Masaki Muranaka <monamour at monaka org>
2006/09/13 16:41
users at toppers jp へ
返信してください
宛先
users at toppers jp
cc
件名
(toppers-users 2531) Re: コンフィギュレータのアライメント
こんにちは.
On 2006/09/13, at 13:37, takaya_kakizaki at 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 もなか