Vista64備忘録

64bit Windowsの備忘録.

32bit Windowsが認識するメモリは4GBが上限だそうで,そのうち通常の意味で使用可能な領域は約3GBに制限されているらしい.その32bit Windowsで1プロセスが使えるメモリ上限は2GBである.OSの起動時にオプションをほげほげすると,1プロセスで3GBまで使えたり,あるいはOSが起動できなくなったりするわけだが,そういう危険な話はさておき…

これが64bitなWindowsではエディションによって8GB〜128GBまで使えるので,64bit環境に移行すると幸せになれるわけだ.しかし,使用しているライブラリなんかを全部64bitに移行するのは大変だし,VC++ Express Editionが32bitしか対応してないので,オレは今もプログラミングは32bitな環境のままである.じゃ,64bitなOSの恩恵は無いのかというと,そうでもない.実は64bit Windows上では32bitアプリは1プロセスで4GBまでメモリが使える.これだけでも移行した価値があるってもんだ.

…と思っていた(しかし実際はそんな大量のメモリを使う機会も無く過ごしていた)のだが,昨日,オレのメモリ喰いまくりなプログラムが落ちるようになったので調べていたら,どうも2GBでメモリエラーを起こしてるっぽい.よくよく調べたら,2GB超のメモリを使う場合,リンカにオプションを与える必要があったらしい.えー?デフォルトでonにしておいてくれよー.

link.exe /LARGEADDRESSAWARE

これで問題解決.2GBの壁も無事に超えた.

#実はメモリ喰いまくる原因はメモリリークだろうと思っているのだが,これで追及する気が失せた.(ぉぃ)

追記:

cygwinでも,

ld.exe --large-address-aware

あるいは

gcc.exe -Wl,--large-address-aware

することで2GBの壁を越えて4GBまでいける模様.