programming

std::vectorでのforeach検証

超適当検証なので結果は保障しません。逆アセンブリをみてみるとunrollはiterator使った場合でもされているようです。ただかなり単純な処理でないとunrollされないので、気にしなくてもいいみたいです。配列形参照を使ったほうが3倍早い結果になりましたが、…

vectorでのforeach

const int nCount = vec.size(); for(int i = 0; i < nCount; ++i) { vec[i]を使った何か }と std::vector<asdf>::iterator i, iEnd = vec.end(); for(i = vec.begin(); i != iEnd; ++ i) { *iを使った何か }はどっちが早いんだろう?どっちも理論的には同じくらい</asdf>…

JIT compile

http://llvm.org/とかhttp://www.parrotcode.org/が有名どころかな?ただ、SIMDサポートはないんだろうなぁ…。レイトレーシングでバイトコードは避けたいところだ。マイクロポリゴン+バイトコードならまだ許せるけど。

Lock Free Synchronization

Lock-freeとWait-freeアルゴリズム - Wikipediaレンダラにも使えるかな? あとで書くかも。

cosfとcosの計算速度が同じ?

少なくともVisual C++だとそうなるみたい。 cosf(x)は((float)cos((double)(x)))へのマクロになってる。GLIBCだとその辺どうなんだろうか?

浮動小数点例外のcatch

どこかからNaNが伝播している模様。困った。Visual Studio 2003では各種浮動小数点演算の例外をcatchできるようになっているが、デバッグ→例外で指定するだけではだめで、 // unmask so that floating point exceptions are thrown _controlfp(0, _MCW_EM);…

ZThreadのコンパイルが通らない

いくつかC++標準に準拠していない記述があるため最新のGCCだと-fpermissiveでエラー回避しないとコンパイルが通らない。もう主流ではないってことか。boost_threadに移行するかな。

templateクラスのstaticメンバのインスタンス化

Visual Studio 2005だと FSingletonDestructorChain* FSingleton::ms_pInst = 0; でコンパイルが通るのに、GCCだと template<> FSingletonDestructorChain* FSingleton::ms_pInst = 0; としないと通らない。これはC++の文法的に上が間違っているということな…

メンバ変数のオーバーヘッド

DGCAアーカイバの作者さんによるループの最適化を読んで。 メンバ変数へのアクセスにオーバーヘッドがあることを失念していた。 よくよく考えてみればメンバ関数はthiscallで呼ばれるし、m_hogeと書いてあるのは実際はthis->m_hogeの略なんだよな。

画像読み込みライブラリ

テクスチャ読み込み実装にあたって、OS非依存な画像ファイル読み込み処理が必要になる。 少し調べてみると、 [GraphicsMagick Image Processing System:http://www.graphicsmagick.org/] [The FreeImage Project:http://freeimage.sourceforge.net/] が見つ…

シーン転送バグ修正

どうも音楽を流しながらシーンデータを転送させようとすると失敗する。ヒープエラー →再現しなくなってしまった。packet size転送時にデータが変化?recv()が-1を返しつつerrno==0という謎のバグ。 →WSAGetLastError()をみてみる。とりあえず受信バッファが…

再現できなくなってしまったヒープエラー

nytrのデバッグで気になることがあったのでメモ。coreSceneTransfer.cppのPolygonData転送でヒープエラーが発生。 Debugビルドでも確かに再現。しかし原因のヒープに対しては読み込みアクセスしかしておらず、書き込みしている頂点バッファのポインタ演算を…

floor, ceil, trunc, round

floor 引き数を越えない最大の整数値 ceil 引き数を下回らない最小の整数値 trunc 0 に近い方の整数値に丸める round 最も近い整数値に丸める (2 つの整数の中間値の場合は 0 から遠い方に丸める) 以上[JM Project:http://www.linux.or.jp/JM/]より。

実装とインタフェースの分離

外部ライブラリへのインタフェースクラスでのクラスヘッダーに外部ライブラリのヘッダーincludeが含まれてしまう問題。 #Colladaファイル読み込み用のCollada DOMライブラリとかなかなかいい解決法が思いつかない。Abstract Factory or Factory Methodもど…

画像転送

やっとプロトタイプ完成。winsockではrecvがtimeoutするとそのソケットは無効になってしまう模様。 仕方ないのでwinsockだけselect()でtimeout待ちするようにする。転送処理をDataTransferとして抽象化したけどやりすぎか?あとでリファクタリングすること。

Singleton

Singletonは意外と難しいみたい。考えておかなければならないこと: いつ破棄されるのか 破棄時に他のSingletonが必要になったらどうする?→Loki参照 でも稀過ぎるケースなのでfectiでは無視 マルチスレッド環境での二重生成 static実装(Mayor実装)でも回避…

libxml linker error on VSnet 2005

error LNK2001: 外部シンボル "_xmlFree" は未解決です。 libcollada_LIBXMLPlugin.lib http://mail.gnome.org/archives/xml/2004-February/msg00380.html使っていたバイナリパッケージがVS.netに対応していなかったというオチ。Cランタイムを静的リンクする…

多重継承

ひっかかったー。 ×: class CASDF : public A, B, C, D { 縲郴 ○: class CASDF : public A, public B, public C, public D { 縲郴上だとB, C, Dはデフォルトのprivate継承(親のメンバはすべて子のprivate扱い)になってしまう。

The underlying data structures used by STL containers

度忘れ。 vector - ただの配列 list - 双方向リンクリスト deque - 配列をページ分割してfront, backへの要素追加が線形時間で可能にしたもの 参考:http://www.gotw.ca/publications/mill14.htmというわけでRecreation chainはlistかなぁ。