パスワードを忘れた? アカウント作成

最新から新しい日記やタレこみを確認できますよ。

9640981 comment

Yoh2のコメント: Re:なぜ? (スコア 1) 7

by Yoh2 (#2431548) ネタ元: ++yoh2

理由はminetさんの意見の通りです。
C++の世界には、RAIIの概念を利用した、宣言しかないけど省略してはマズいクラスインスタンスがごろごろしているわけで。
単純なクラスならオプティマイザが効くかもしれませんが、ある程度複雑になるとコンパイラはそういった連中と区別付かなくなるのではないかと思い始めた次第です。
年齢なんていかにもな整数型なら関係ないのですがどうせなら統一していこうかと。

7330413 comment

Yoh2のコメント: Re:それ以前に (スコア 1) 12

自分のところ(x86とppc)で動けばいいや、というプログラムの場合、アライメントを気にせず読み込んでhtonlなどでバイトオーダー調整なんぞやってたもんで。memcpyすらタイプを面倒がってました。

7329894 comment

Yoh2のコメント: Re:それ以前に (スコア 1) 12

フリーダムだという保証があるのかフリーダムだと思い込んでいただけなのか、そこが問題なわけで。
ロクに調べないうちに日記を書いたので、もう少し調べてからにした方がよかったかもしれませんが。
といっても 、過去にvoid * と関数へのポインタ の相互変換を認める追加ルール (※) を探しても見付けられなかった程度の調査力なので、きちんと調べても調べ切れるかどうか。

※ C99以降 (それ以前は知らん) では、関数へのポインタは他の関数へのポインタへの変換以外は規定されていないので、追加ルールがないとvoid *との相互変換は未定義。そしてこれが未定義になるとdlsymの存在意義に関わってくるのでどこかで追加ルールを設定しているはず。

しかし、もしアライメントが揃っていないアドレスへのアクセスがダメとの結果が出たら過去に書いたIPヘッダとかISO9660とかのパーサが……
奇数アドレスからの複数バイトフィールドとか、4で割り切れないアドレスからの4バイトフィールドとかあるし。

7329848 comment

Yoh2のコメント: Re:(uint64_t *)((char *)malloc(... が規格上未定義 (スコア 1) 12

逆参照した場合の挙動が処理系定義 or 未定義と覚え違いをしていました。ポインタの時点でそうなんですね。
が、同じ 6.3.2.3 Pointers の 5 で

An integer may be converted to any pointer type. Except as previously specified, the result is implementation-defined, might not be correctly aligned, might not point to an entity of the referenced type, and might be a trap reprensentation.

とありますので、char *経由ではなくintptr_t経由ならOKのように思えました。またはポインタ経由でもgccで保証があればいいわけですが未調査です。
※ 「previously specified」は、nullポインタと0についての話 (2で規定) のことだと思います。

また、アライメントについての話は、C11で 6.2.8 Alignment of objects という節が追加されています。
ただ、アライメントのサイズがどうなるかという話のみで、アライメントされていない場合のアクセスはどうなるかまでは書かれていません。
なお、C11で追加された _Alignof の結果は、char: 1、short: 2、int: 4、long: 8、float: 4、double: 8 (gcc-4.7.2, x86_64 -- 4.6.3では_Alignof未サポート) でした。sizeofと一致しますね。

調べるべきことが残っている上に増えてもいますが、とりあえずはここまで。

7324924 comment

Yoh2のコメント: Re:(uint64_t *)((char *)malloc(... が規格上未定義 (スコア 1) 12

どの辺がダメなんでしょう?
void * → char * : 言うまでもなくOKだと思います。
char *型に +1 : これもOKだと思います。
char * → uint64_t * : 異なるオブジェクト型のポインタの相互変換はOKだったと思いますがダメでしたっけ?

まあ、これが未定義だとしても別の方法で奇数アドレスを持つ、十分な大きさの有効なオブジェクトをsrcに代入すればいいわけで。
そもそも未定義とならない方法でそれを実現できる方法はなかったりします?

7324358 journal
プログラミング

Yoh2の日記: アライメント揃ってなくても大丈夫だというのは思い込み? 12

日記 by Yoh2

x86系って、SIMDを明示的に使わない限り、アライメント境界が揃っていないデータ転送プログラムを書いても、パフォーマンスさえ気にしなければ特に問題ないという認識でいた。
が、実はそんな保証がないのではないかという現象に遭遇した。
それはx86_64でuint64_tの配列をコピーするコード。gcc -O3でコンパイルし、コピー元を奇数アドレスにしたらプログラムが落ちた。

試したgccは以下の3種類。いずれも現象発生。

  • gcc-4.6.x (詳細忘れ。Ubuntu 12.04)
  • gcc-4.6.3 (Gentoo)
  • gcc-4.7.2 (Gentoo)

以下、再現コード。上記コンパイラで-O2までは問題ないが-O3で落ちる。

7319116 journal
日記

Yoh2の日記: SETI@Home仮復帰

日記 by Yoh2

一昨年の3.11から電力不足を懸念してSETI@Homeへの参加を見合わせていたが、PCアップグレード記念 & 鯖PCの復活させたCPUの動作確認 (取り付け時にソケットにクーラーを落としてピンを曲げたということもあったし) として再開してみた。
とはいえ、電力供給能力は低下したままのはずなので、東電に余裕がないような時は自重するつもり。

BOINCstats現在の状況を見てみると、世界順位が、過去最高で2987位だったところが12346位、国内順位が最高が不明で現在が622位。
世界順位はともかく、国内順位が思ったより下がってなかったと感じる。私と同様に参加を中止した人が多かったんだろうか。

7309193 comment

Yoh2のコメント: MiniUPnP (スコア 1) 1

by Yoh2 (#2316275) ネタ元: 「UPnP」に脆弱性、ルータなど数千万台に影響

自作ルータでminiupnpdを使っている私に死角はなかった。
と言いたいところですが、実際のところ調べていないだけなので改めて調べてみました。
結果、現状では得に脆弱性情報は見当たりませんでした。多分一安心。
同じMiniUPnPプロジェクトのMiniSSPDdの脆弱性が放置気味っぽいですが、upnpdには関係なし (と思いたい)。

7137313 comment

Yoh2のコメント: Re:お仕事の忙しさ次第ですが (スコア 1) 7

こちらの手元にあるのが、無印がMayfair版 (という表現でいいのか?)、海がGP版。
海のマニュアルでは、過去に発売されたものと組み合わせられないとありましたが、無理すれば遊べないこともないかも。
もちろん、無印のGP版があればそれに越したことはありませんが。

  • タイルの大きさは同じ → 問題なし
  • 絵柄や駒のデザインが違う → カッコ悪いけど気にしなければOK?
  • 海フレームの切り欠きの形が違って組み合わせられない → 切り欠きは見なかったことにすれば何とか。安定性悪し。
typodupeerror

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

読み込み中...