アカウント名:
パスワード:
x86系って、SIMDを明示的に使わない限り、アライメント境界が揃っていないデータ転送プログラムを書いても、パフォーマンスさえ気にしなければ特に問題ないという認識でいた。
SIMD使わなくても、アラインメント狂っていたら例外出されておかしくない。alignment-tolerant processorsの場合は速度低下だけだが、alignment-strict processorsの場合は、不正アラインメント例外だ。
そんなことは承知の上でx86の話をしているというのに、トンチキな奴だな
x86は比較的緩かったとは思うが何でもありなぐらいにフリーダムだったっけ?
フリーダムだという保証があるのかフリーダムだと思い込んでいただけなのか、そこが問題なわけで。ロクに調べないうちに日記を書いたので、もう少し調べてからにした方がよかったかもしれませんが。といっても 、過去にvoid * と関数へのポインタ の相互変換を認める追加ルール (※) を探しても見付けられなかった程度の調査力なので、きちんと調べても調べ切れるかどうか。
※ C99以降 (それ以前は知らん) では、関数へのポインタは他の関数へのポインタへの変換以外は規定されていないので、追加ルールがないとvoid *との相互変換は未定義。そしてこれが未定義になるとdlsymの存在意義に関わってくるのでどこかで追加ルールを設定しているはず。
しかし、もしアライメントが揃っていないアドレスへのアクセスがダメとの結果が出たら過去に書いたIPヘッダとかISO9660とかのパーサが……奇数アドレスからの複数バイトフィールドとか、4で割り切れないアドレスからの4バイトフィールドとかあるし。
> 奇数アドレスからの複数バイトフィールドとか、4で割り切れないアドレスからの4バイトフィールド
そういうのは、バイト単位でアクセスしてプログラムコード的にシフト等駆使して16bitなり32bitとの相互変換するのがまっとうなやり方でしょう。アライメント以前に、エンディアンはどうなってるの?と言う点で動作保証がないし。
自分のところ(x86とppc)で動けばいいや、というプログラムの場合、アライメントを気にせず読み込んでhtonlなどでバイトオーダー調整なんぞやってたもんで。memcpyすらタイプを面倒がってました。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
人生unstable -- あるハッカー
それ以前に (スコア:0)
SIMD使わなくても、アラインメント狂っていたら例外出されておかしくない。
alignment-tolerant processorsの場合は速度低下だけだが、alignment-strict processorsの場合は、不正アラインメント例外だ。
Re: (スコア:0)
そんなことは承知の上でx86の話をしているというのに、トンチキな奴だな
Re: (スコア:0)
x86は比較的緩かったとは思うが何でもありなぐらいにフリーダムだったっけ?
Re: (スコア:1)
フリーダムだという保証があるのかフリーダムだと思い込んでいただけなのか、そこが問題なわけで。
ロクに調べないうちに日記を書いたので、もう少し調べてからにした方がよかったかもしれませんが。
といっても 、過去にvoid * と関数へのポインタ の相互変換を認める追加ルール (※) を探しても見付けられなかった程度の調査力なので、きちんと調べても調べ切れるかどうか。
※ C99以降 (それ以前は知らん) では、関数へのポインタは他の関数へのポインタへの変換以外は規定されていないので、追加ルールがないとvoid *との相互変換は未定義。そしてこれが未定義になるとdlsymの存在意義に関わってくるのでどこかで追加ルールを設定しているはず。
しかし、もしアライメントが揃っていないアドレスへのアクセスがダメとの結果が出たら過去に書いたIPヘッダとかISO9660とかのパーサが……
奇数アドレスからの複数バイトフィールドとか、4で割り切れないアドレスからの4バイトフィールドとかあるし。
巧妙に潜伏したバグは心霊現象と区別が付かない。
Re: (スコア:2)
> 奇数アドレスからの複数バイトフィールドとか、4で割り切れないアドレスからの4バイトフィールド
そういうのは、バイト単位でアクセスしてプログラムコード的にシフト等駆使して16bitなり32bitとの相互変換するのがまっとうなやり方でしょう。
アライメント以前に、エンディアンはどうなってるの?と言う点で動作保証がないし。
Re:それ以前に (スコア:1)
自分のところ(x86とppc)で動けばいいや、というプログラムの場合、アライメントを気にせず読み込んでhtonlなどでバイトオーダー調整なんぞやってたもんで。memcpyすらタイプを面倒がってました。
巧妙に潜伏したバグは心霊現象と区別が付かない。