未初期化メモリを使う方法

research!rsc: Using Uninitialized Memory for Fun and Profit

N個のフラグを扱う場面があるとする。まず,こんな感じで書き始めることになると思う。

bool flags[N];
for (int i=0; i<N; ++i) flags[i]=false;

もしこのとき,Nがものすごく大きかったら……フラグをクリアする処理だけで,結構な時間を食ってしまうかもしれない。

そんなときのために編み出されたのが,上のエントリーで紹介されているアルゴリズム。二つのテーブルを組み合わせて使うことにより,メモリを未初期化のまま使うことを可能にしている。

未初期化のメモリへのアクセスなんて,それ自体が不正なことのように感じられるかもしれないけれど,たまには未初期化のまま使ってみるのもオツなものですよ……という話。実用性については,正直なところあまり無いと思う。