std::vectorのスピードとか・・・。

d:id:Cryolite:20040714#p3
より。std::vectorについてだ。
私はstd::vectorは結構、優秀な方のコンテナだと思うし、*1使うときには使う。

しかしだ・・・。あれだ!std::vector
C言語でも使える型*2にははっきり言って使えないのだ。
例えば、unsigned char型をpush_backしていたら普通の動的確保+memcpyの100倍かかっちゃた。って事もある。*3
一応、std::vectorの使い方にも裏技もある。
http://www.s34.co.jp/cpptechdoc/article/vectorastemp/
しかしだ、この裏技を使うと、size()が書き込んだ値を返してくれないのだ。*4
やっぱり、テンポラリバッファとしての利用が前提のようだ。

個人的にはやっぱりそのページでも紹介されているようにscoped_arrayを使った方が幸せかと・・・。

という事でこのジレンマをどうにかすべく、車輪の再発明をしたのが、byte_buffer*5 と scoped_buffer だ。
http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/dkingyoutility/dkutil/dkutilBuffer.h
scoped_array に size()とかresize()を付加したものだ。

このクラスは一番 使用頻度が高い。
私のC++ソースコードの中にこのscoped_bufferが登場しないソースはかなり珍しい。
それくらい、今は重宝している。

*1:と、イイマスカ、STLに優秀じゃないコンテナは無いね^^;場面によってはまったく使えないものもあるけど・・・

*2:プレーンなんたらかんたら型 スマン、調べなおす

*3:実際計った。http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/dkingyoutility/dkutil/dkutil_test/tested.cpp?rev=1.12&content-type=text/vnd.viewcvs-markup void Test_VectorSpeed()って奴

*4:まぁ、言われて見れば当たり前だが・・・

*5:未完成

memcpyの速さ・・・意外なのは・・・

ちなみに、リンク元STLコンテナのオーバーヘッドについてのお話だったが、何だかんだいって、memcpyがほぼ最速なのは意外だった。
http://beautiful.homelinux.net/~sky-software/diary/?date=20040703
http://beautiful.homelinux.net/~sky-software/diary/?date=20040704
d:id:studiokingyo:20040621

STLのセオリーは?

というか、std::vectorはどのくらいのメモリサイズを使うか、分かっているから使うのがセオリーってモンでしょ!*1
普通、どのくらい使うかわからない場合はstd::dequeを私は多用する。
ちなみにstd::listは一つの要素が1024Byte以上、または、イテレータ無効ではマズイ時じゃないと使わない主義・・・。((12バイトほど余計に使うのはモッタイナイよ!
std::mapは挿入、削除が頻繁なものに使う。多分、STLの中でこれがstd::stringに次いで、使用頻度が高いと思う。

え?stackとqueueは? どうせdequeのラッパーならdeque使った方がマシ。よほど明示的にしたいなら使っても良いと思うが・・・イテレータがないのはつらいよ。

*1:とか言ってみる

やっぱりvectorはつらいよ。

私のテスト結果 (critical section 付き rtdtscrdtsc命令により計測)


さて、どちらが速いのか?
vector: RealCPUClock:767684362.000000
char: RealCPUClock:8060938.000000
char の方が約95倍速い・・・。むむ〜やっぱり大変ですねぇ。

文字列処理ライブラリ懇願

特に文字列処理・・・。これは忌忌しい問題だ。
処理結果は同じなのに、何故かライセンスの緩いソースコードはなかなか落ちていない・・・。
UNICODESJIS,JIS,その他文字コードイロイロ、パーサースキャナーコンバーターイロイロ。
と、私のプログラミング時間のうち3分の1はそれらに費やされていると思う。

という事で、実は私も見たことないので、ちょっと情報求めちゃってもイイですか?

どちら様かご存知でしたら。メール、または、コメントにでもよろしくお願いします。m(_ _)m

それから、こちらの方の他力本願もどちら様かご存知でしたら・・・
d:id:studiokingyo:20040704

*1:dkutilにはちょっと難アリのCommandLineParserクラスがあるが・・・。

*2:案の定これもdkutilライブラリにぶち込んでみた。dkcFileSystem.hやpath_stringクラスなんてのも作ったけど、信用できるレベルには程遠い。

*3:確か・・・、ICU(国際基督教大学 って違うっての) ってライブラリがあったけど、ライセンス良くわからない ライセンス解釈どちら様かご存知ですか?m(_ _)m

*4:そんなものあったら苦労しないよ・・・ 似たような物に・・・SwingだっけSwigだっけ?

リアルタイムテキストビューワーをちと・・・。

リアルタイムテキストビューワーが欲しかったので、FOX-toolkitに付いてくるadieというエディターのソースの2行を無効にしてリアルタイムテキストビューワー化させた。
ソース+バイナリはこちらから。
http://www33.tok2.com/home/dca/dkutil.html