2011-01-01から1ヶ月間の記事一覧

Expression Templateの蛇足的な話

C++

Preface 前にプリプロセサを駆使してシリアライザを書いたことがあったのですが、Expression Template(以下 式テンプレート)を使えば#define使わなくても近いようなことできるなーと思いついたので、実際に作ってみました。 で、そっちを説明しようと思った…

【算術演算小話 その三】 コンパイラの除算最適化

最後です。 これも@machyさんから、2の冪乗での除算の場合、intとunsigned intで発行される命令数が違うという話を聞いて、詳しく調べてみた話です。 で、実際に検証するために、以下のコードをコンパイルしてみました。 int main(int argc, char *argv[]) {…

【算術演算小話 その二】 負の剰余について

C++

今回は負の剰余の話です。 剰余は正の数同士の場合は何も問題ないのですが、負の剰余をとってしまうとはまることがあります。 なぜなら言語処理系依存だからです。C++, pythonのそれぞれを比較すると下記のようになります。 (C) -2 % 5 = -2 (python) -2 % 5…

【算術演算小話 その一】 倍数への切り上げ

C++

パイプライン処理といった技術の発達した最近のCPUでは、条件分岐を減らすことで最適化が可能な場面があります。 こういった場合に稀に利用されるのが、算術演算を利用したテクニックです。 算術演算を上手く利用することで、場合によっては必要だった条件分…

fstreamのデストラクタを追ってみた話

C++

僕がC++をいいなぁと思う理由の一つに、RAIIが使えるという点がありました。 ただ最近RAIIに対して懐疑的に思えてきたので、そのことを書きたいと思います。 RAIIというのはオブジェクトのコンストラクタでファイルの初期化やロックの取得などリソースの獲得…

fcntlを使ったアドバイザリロックはスレッド排他しない。

ほぼタイトル通りですが、flock(2)はスレッド排他するようですがfcntlを使ったPOSIXアドバイザリロックはスレッド排他しないんだなーということを検証してみたのでメモ。 以下がその検証のコード。上記のリンク先のコードがベースです。 一瞬で止まりました…