ほっしーの技術ネタ備忘録

技術ネタの備忘録です。基本的に私が忘れないためのものです。他の人の役にも立つといいなぁ。

展開速度の高速化その1


まず比較対象。昨日までは

Decompress: 42.09ms


タイマーを使っていろいろ調べた結果、ネックになってたのが new 演算子

struct TComplStack {
	TComplStack() : x(0), y(0), pattern(0) { }
	TComplStack( int _x, int _y, u_char _pattern ) : x(_x), y(_y), pattern(_pattern) { }
	int x, y; u_char pattern;
};

こんな構造体がありましてね。

boost::shared_array<TComplStack> CStack( new TComplStack[ width * height ] );

とか確保してたわけです。

画像が 640x480 で実験してるので、コンストラクタは 307200 回呼ばれることに!!


この構造体の配列は、前から順に書き込んでいって、書き込んだ数を記録してあるので初期化は不要。
よって以下のように改善。

u_char* buffer = new u_char[ width * height * sizeof(TComplStack) ];
boost::shared_array<TComplStack> CStack( (TComplStack*)buffer );

これで

Decompress: 32.33ms

約10ms の高速化。