VC++.Net2003 で、というか WindowsXPSP2 で、一度に大きいメモリ領域を new や malloc で確保しようとすると失敗してしまった。これはよくある話で、一部の dll がメモリ空間上の特定の位置に居座るため、空きメモリ空間が分断されているのが原因らしい。
まず、そういうdllのなかでメジャーなのは、IME だそうな。WinMain の頭にでも ImmDisableIME(NULL) とか入れると IME は使えなくなるが、連続領域が確保できるようになるらしい。
今回、700MB余りを確保しようとして、上記 TIPS も入れてみたがダメだった。で、VC++ のデバッグで、モジュール一覧を表示してみると、JWord(IE のアドレスバーの拡張もの?)の dll、CnsMin.dll がいやらしい場所に居座っていた。面倒なので、JWord をアンインストール。再起動後、無事にメモリが確保できるようになった。
JWord は日本語ドメインをIEで使うのに役立ってはいたのだが(実は日本語ドメインを一つ確保している私...)。IE 拡張系の dll はやっかいなのだろうか。