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
このクラスは一番 使用頻度が高い。
私のC++のソースコードの中にこのscoped_bufferが登場しないソースはかなり珍しい。
それくらい、今は重宝している。
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倍速い・・・。むむ〜やっぱり大変ですねぇ。
文字列処理ライブラリ懇願
特に文字列処理・・・。これは忌忌しい問題だ。
処理結果は同じなのに、何故かライセンスの緩いソースコードはなかなか落ちていない・・・。
UNICODE、SJIS,JIS,その他文字コードイロイロ、パーサースキャナーコンバーターイロイロ。
と、私のプログラミング時間のうち3分の1はそれらに費やされていると思う。
という事で、実は私も見たことないので、ちょっと情報求めちゃってもイイですか?
- コマンドラインパーサー(日本語(SJIS)に完全対応している) *1
- ディレクトリ文字列クラス(日本語(SJIS)に完全対応している) *2
- 完全無料文字コード相互コンバーターライブラリ *3
- C++,D,Java to C *4
どちら様かご存知でしたら。メール、または、コメントにでもよろしくお願いします。m(_ _)m
それから、こちらの方の他力本願もどちら様かご存知でしたら・・・
d:id:studiokingyo:20040704
リアルタイムテキストビューワーをちと・・・。
リアルタイムテキストビューワーが欲しかったので、FOX-toolkitに付いてくるadieというエディターのソースの2行を無効にしてリアルタイムテキストビューワー化させた。
ソース+バイナリはこちらから。
http://www33.tok2.com/home/dca/dkutil.html