C++

大容量ファイルI/Oの効率について 其の弐

id:NyaRuRu さんからコメントでご指摘を頂き、再計測したのですが下のような結果が得られました。 FILE_FLAG_NO_BUFFERING 指定のない ReadFile() #FF0000;">-赤線-:リニアにアクセス速度が低下していく。FILE_FLAG_NO_BUFFERING の指定がある場合にはリニア…

大容量ファイルI/Oの効率について

数百GiBクラス以上のボリュームのデータを処理してると極端にパフォーマンスが落ちちゃう問題だけど、原因の一つは、どうも大容量ファイルI/Oの場合にはファイルマッピングだと効率が悪いことにある模様(環境やその他の条件にもよるのかもしれないけど)。推…

バグベアードを利用したプロファイリング

今現在、バグベアードを利用してプロファイリングをやろうなどと、輪をかけて馬鹿なことを考えているとこなんですが、実際のところ、いまのバグベアードに一切手を入れなくてもバグベアードによって出力されたログを解析するツールを用意するだけでプロファ…

Visual C++ 以外、volatile の扱いがダメダメな件について

C++

昨日、g++ での volatile の扱いが微妙に変 というエントリーを書いたわけですが、その後 volatile 修飾対応を進めていると g++ 以外のコンパイラについても volatile まわりの問題が噴出し、付き合ってられないので volatile 修飾対応は断念しました。コン…

g++ での volatile の扱いが微妙に変

C++

スレッドセーフの定義では「基本的に複数のスレッドからアクセスするオブジェクトには volatile 修飾しません?」などとコメントしつつも、その実、ほぼ全ての自作クラスは volatile 修飾に全然対応してなかったよなぁと、反省し、volatile 修飾対応を始めた…

スレッドセーフの定義(其の弐)というかリエントラントの定義というか...

C++

http://ja.wikipedia.org/wiki/リエントラントリエントラントなコードはスレッドセーフであるほか、データを壊すことなく処理を一時中断することもできる。Wikipedia での定義によるとリエントラントなコードはスレッドセーフということになっており、これは…

if (0 == obj.size()) → if (obj.empty())

直感的に理解しやすいコーディングスタイルを心がけてるんで "0 == ..." っていうイディオムは直感的で気に入ってて obj.empty() よりも好んで使ってたんですが、残念ながら obj.size() を利用するのは時として obj.empty() を利用するよりもパフォーマンス…

スレッドセーフの定義

C++

# 茶々入れ、失礼。m(_ _)m > id:y-hamigaki[Hamigaki]設計方針「何を以ってスレッドセーフとするか明示していないライブラリは怖くて使えない!」と言いつつ、自分のライブラリに何も書いてなかったので設計方針をドキュメントに追加しました。確かにそ…

バグベアードを更新しました。

http://tricklib.com/cxx/ex/bugbeard/ 2008-04-01 以下の点を修正。 BUG_MASK_SOURCECODE の追加。 "悪魔の契約" の「構文の制限」に "例外仕様構文" に関する記述を追記。 BUG_MASK_SOURCECODE に関しては...このマクロが定義されているとステートメントハ…

メモリー操作ユーティリティを公開しました。

C++

http://tricklib.com/cxx/dagger/trickmem.h以下のような内容のメモリー操作ユーティリティを公開しました。 ARRAY_SIZEマクロ ARRAY_ENDマクロ typedef unsigned char byte_type; binary_ptr/const_binary_ptrクラス binary_dataクラス memand()/memor()/me…

バグベアードを更新しました。

http://tricklib.com/cxx/ex/bugbeard/ 2008-03-10 以下の点を修正。 "悪魔の契約" に「順序不安定」を追記。 bug_compact_tree_logger の追加。 インクルードの <sys\timeb.h> のパスを <sys/timeb.h> に修正。 命名規則的に明らかにおかしいところ一部修正 BUG_SINT64_TYPE→bug_sint6</sys/timeb.h></sys\timeb.h>…

バグベアードを更新しました。

http://tricklib.com/cxx/ex/bugbeard/ 2008-02-25 inline指定が抜けてて複数のコンパイル単位から利用するとリンク時にシンボルが衝突する問題を修正。うっかりしてました。 それにしてもこうまで反応がないとちと寂しいな。しばらくは積極的に喧伝してみよ…

バグベアードを更新しました。

http://tricklib.com/cxx/ex/bugbeard/ 簡潔かつ乱暴に説明すると、このモジュールは printf デバッギングを簡単且つゴージャスに行う為のものです。 バグベアードはC++プログラマの目となり、その膨大なログで大半のバグを丸裸にします。 "Coming soon..." …

FlushFileBuffers() が死ぬほど遅い件について

Coming Soon... などと謳いつつ長らくほったらかしにしてたバグベアードをちゃんとリリースすべく、最近弄り回してんだけど、それまで概ね 0.1 秒で終了してたテストプログラムが 8.0 秒もかかるようになって変なバグでも埋め込んじゃったのか?と思いつつ調…

メッセージボックス表示コマンド ver 2.0

前回のものに以下の修正を加えました。 MessageBoxTimeout() に対応。-t コマンドライン引数でタイムアウトまでの時間(ミリ秒単位)を指定できます。 (この関係でコマンドライン引数で以前は -tタイトル だったところを -cキャプション に変更。) コマンドラ…

メッセージボックス表示コマンド

前々から作ろうと思ってたメッセージボックスを表示するだけのプログラムです。バッチファイルの御供にどうぞ。silentとも相性がいいです。 ////////////////////////////////////////////////////////////////////////////// // // includes // #if !define…

#if ディレクティブで sizeof が使えなくていいらしい。

C++

#if ディレクティブで sizeof が使えない。 に id:sulpsulpc さんからトラックバックでのご指摘がありました。 JIS X 3014 16.1 p4 マクロ展開及び defined 単項演算子によるすべての置換の実行後、残っているすべての識別子、及び true と false を除くキー…

neticon を更新しました。

http://tricklib.com/cxx/ex/neticon/ 2008-01-06 ポートチェックのみ IPv6 に対応しました。( PING チェックはまだ IPv6 に対応してません ) IPv6 の API が既存の IPv4 ベースのアプリケーションを IPv6 へ対応し易いように考慮してくれてはいるみたいなの…

#if ディレクティブで sizeof が使えない。

C++

規格票( ISO/IEC 14882:2003 もしくは JIS X 3014:2003 )の 16.1.4 によると #if ディレクティブの条件式は先立って 5.19 の規定に従って評価されることになっているわけですが、この 5.19 は定数式の定義に関する項目であり当然の如く sizeof 演算子が含ま…

エラーハンドリングフレームワークを公開しました。

C++

http://tricklib.com/cxx/dagger/trickerr.h以下、上記ファイルのコメント中のデザインノートより... このフレームワークはファンクションインターフェイスに制限されないエラー 情報ツリーを扱う為のものです。 一般的にエラーを機能の呼び出し元に返す方法…

派生クラスのポインタで例外をキャッチできない。

C++

#include <stdio.h> #include <stdlib.h> class A { public: virtual ~A() { } virtual const char *get_name() { return "A"; } }; class B :public A { public: virtual const char *get_name() { return "B"; } }; int main(int argc, char *args[]) { argc, args; // 警告避</stdlib.h></stdio.h>…

Transactional NTFS (TxF)

ちょっと別件で調べものしてて偶然 Transactional NTFS (TxF) なるものを発見。この機能を一言で説明すると「各種ファイル操作をトランザクションベースで実行することで各種ファイル操作を一括でのコミット及びロールバックを実現する機能」。WinFS が Vist…

標準の例外クラスの what() で返されるメッセージが酷い件について

C++

例えば、以下は std::bad_alloc クラスの what() で返されるメッセージの一覧なんだけど... コンパイラ what()で返されるメッセージ Borland C++ 5.6.4 no named exception thrown Visual C++ 8.0 bad allocation Code Warrior 8.0 exception g++ 3.4.4 St9e…

fileinfo を公開しました。

http://tricklib.com/cxx/ex/fileinfo/ fileinfo は calligrapher と同じく Windows Explorer のプラグインです。 fileinfo をインストールするとエクスプローラのリストビューペインの[詳細表示]モードのカラムに [先頭8バイト]、[MD5]、[SHA1]を追加できる…

HQ9+インタープリタ

C++

以前からHQ9+のインタープリタを書いてみようとは思ってたんだけど、実際に書いてみたらあまりにもショボくてビックリした。曲がりなりにもコンピュータ言語のインタープリタだと言うことで少々かまえ過ぎていたようだ。以下は C++ で書いたそのHQ9+インター…

logitech/logicool LCDSDK のチュートリアルと lglcd.h リファレンスをアップしました。

http://www.trickpalace.net/windows/logicool/lcdsdk/tutorial.htm http://www.trickpalace.net/windows/logicool/lcdsdk/reference/lglcd.htm 特にチュートリアルがちょっと投げやり気味ですが、しばらくはあんまり時間をかけて完璧なものを目指すよりはと…

拡張文字列クラスを更新しました。

C++

http://tricklib.com/cxx/dagger/xstring.h昨日の修正がチョンボってて、bcc ではコンパイルが通っても gcc ではコンパイルが通らなくなってました。...我ながらなにやってんだか。orz...いちいち手作業で多種複数バージョンのコンパイラでチェックなんかし…

拡張文字列クラスを更新しました。

C++

http://tricklib.com/cxx/dagger/xstring.hbcc 5.5.1 でコンパイルすると「コンパイラ内部のエラー」が発生するようになっていたので対処しました。

拡張文字列クラスを更新しました。

C++

http://tricklib.com/cxx/dagger/xstring.h先日の修正で、DISABLED_XSTRING_MULTILITERAL が指定されずに DISABLED_WXSTRING が指定されるとコンパイルエラーになってしまうようになっていたので修正しました。

logitech/logicool LCDSDK の解説ページを作成しました。

http://www.trickpalace.net/windows/logicool/lcdsdk/ logitech/logicool LCDSDK は logitech/logicool の液晶パネルを内蔵した製品である G15(キーボード) や Z-10(スピーカ) などの液晶パネルへの表示とそれに付随するボタン入力が行える LCD アプレット(…