2ntブログ

TERA(クラッシック版)と3GBスイッチ

3GBスイッチとは、32bit版OSにて本来は使用できない3GB以上のメモリを、アプリケーションが使えるようにするための起動オプションです。
やり方は3GBスイッチで検索すれば沢山出てきますので、そちらをご覧下さい。

さてTERAは32bit版OSでやると、結構な頻度で落ちます。
原因は32bitOSの「アプリケーションは最大で2GBまでしかメモリを使ってはいけません」という制約に引っかかるためです。
ちょっと知識のある人なら、Windowsには仮想メモリというHDDをメモリ代わりに使用して、搭載メモリ以上の容量を使えるのに、おかしいじゃないか?と思う人も居るでしょう。
しかし32bit版Windowsの仮想メモリといのは、アプリケーションが使えるメモリの不足を補うものではありません。
32bit版OS標準搭載のPCでは、メモリは4GBまで載っているのが多いです。
マザーボードの仕様により、4GB以上のメモリを搭載できるものも多いですが、それ以上のメモリは搭載してもOSが対応してないので、意味が無いと言われています。
さて、4GB載っている標準的な32bit版Windows7搭載PCでも、アプリケーションが2GB最大まで使ってしまえば、それ以上のアプリケーションは起動できなくなってしまいます。
制約ぎりぎりの2GBを使うアプリケーションを2つ以上は起動できない。
これではアプリケーションをいくつも同時に起動できるというWindowsの売りが、意味なくなってしまいます。
そこで「仮想メモリ」という仕組みで、使用頻度の低いアプリケーションが占有しているメモリエリアをHDDへ一時的に保存してメモリを開放して、他のアプリケーションを起動したりするのに使わせているのです。
つまり「仮想メモリ」とは、アプリケーションが際限なくメモリを使えるようにするための仕様ではなく、同時起動できるアプリケーションの数の制限を無くすためのものです。
従って、「仮想メモリ」をどんなに増やそうとも、2GBを超えるメモリをアプリケーションが使えるようになることはありません。

さて本題ですがTERAをはじめとした、ここ最近のゲーム開発者は非常にレベルが低いです。
32bit版OSでは、1つのアプリケーションが使えるメモリの最大値は2GBまでという制約を知らない奴すら居ますw
仮に知っていも、「メモリ管理」ができない低レベルの開発者ばかりなので、容量オーバーしてしまうのです。
この場合、当然ながらエラーとなるのでアプリケーションは強制終了されます。
これが「落ちる」事の実態ですw

3GBスイッチというのは、この1つのアプリケーションが使える最大メモリは2GBまでという制約を、3GBまで拡張するものです、簡単に言えば。
ただ32bitOS対応のアプリケーションというのは、一応は2GB以内のメモリしか使用しないように作られています。
ですがメモリ管理できない低脳が多いので、穴だらけであり、何かの拍子にメモリオーバーする事も多いですw
なので3GBスイッチを設定してやると、落ちなくなります。
経験上、2GBを超えるメモリを使って落ちてるっぽいアプリは、100パーセントこれでおちなくなります。
TERAも例外ではありませんでしたw

さて、3GBスイッチは良い事づくめのようですが、そもそもそんなに良いものならば、デフォルトでONになってるはずです。
しかしWindowsのデフォルト(初期状態)でOFFにされてるのは、それが動作の安定性を損ねる可能性があるからです。
なぜなら、本来はOSやドライバーなどの「システムプログラム」が使うべきメモリ領域を、アプリケーションに使わせるからです。
OSやドライバー側がメモリ不足でエラーになったり動作が遅くなったりする可能性があるのは分かると思います。

よって私は3GBスイッチで、フルに3GBまで制約を解除する事はしません。
2GBの制約違反を犯して落ちるアプリってのは、大抵は3GBまでメモリを使おうとして落ちるのではなく、低脳なプログラマのずさんなメモリ管理によって、2GBをちょっとだけ超えちゃう事があるって程度だからです。
なので2GBをちょっとだけ拡張するだけで、わざわざ3GBフルに使えるよう設定しなくても、落ちなくなります。
それが2.1GBなのか2.5GBなのかは、PCの環境やアプリケーションの糞度によって変わってきますが、少なくとも3GBフルに拡張するよりは、安定動作する確率が高くなります。

Windows7では3072みたいな形で拡張するメモリの数値を具体的に書きますが、そこを2500(2.5GB)とする事によって、システム側が使うメモリの減少を抑え、かつアプリケーションのメモリ違反に対応できる拡張をする事ができるって具合です。

ちなみに私は今、3GBスイッチを使ってアプリケーション側が2.5GBまでメモリを使ってもエラーが出ないようにしてますが、これでTERAはまったく落ちなくなりました。
2.1GBぐらいでも行けるかもしれません。
Windows側への影響ですが、ディスクアクセスが体感的にちょっと遅くなった以外は特に問題は出ていません。

プログラマというのは、単に開発言語の命令語や文法だけ知っていれば良いものではないと前から言っているのですが、理解していただけないようでw
メモリ容量が今より格段に少なかった、ファミコン時代とかのゲーム開発者の苦労話で有名なのがあります。
ドラクエの呪文や町の名前は、容量の都合で全ての「ひらがな」をカセットに入れられなかった事による、苦肉の策で、入れられた文字のみ使って表現しようとしたため、というものですw
このぐらい、昔のプログラマは苦労してメモリと戦ってたんです。
その当時から見れば、今のPCの4GBというメモリは、「無限」にも近いものでしょうw
しかし実際、メモリというのは現代でも「無限」ではありません。

VisualBasic(通称VB)という開発言語には、変数の型というのがあります。
その変数に文字が入るのか、数値が入るのか、数値ならばどんな範囲の数値なのか(小数点以下を含むものなのか、あるいは整数だけなのか、マイナスの数値は扱うのかなどなど)により、変数の仕様を定義するものです。
これを行わない場合、文字でも数値でもマイナスでも小数点ありの数値でも入る「万能型」に設定されます。
当然ながら、その分メモリを食いますw
これが分からないアホが多いというのが、かつてまじめに社会人として開発をするような企業に勤めた事もある私の実体験です。
VBはBasicの一種なので、FOR ○ TO △ ~ NEXT ○といった、いわゆるループという命令が存在します。
この時の「○」の部分には、カウンターの役割をする変数が入るわけですが、回数をカウントするだけの変数なので、整数です。
マイナスになったり、小数点の数値になったりする事はありません。
また1000回とか1万回とかループするような処理を、FOR~NEXTで行う事はありません。
従ってカウンタ用の変数に使うメモリは、最小の1バイトで良いわけです。
なので私は常に全ての変数について、きっちり必ず最小のメモリで済むように型の宣言を怠りませんでした。
ちなみに、VBの変数の定義でもっともメモリを使わないのはバイト形と言われるものです。
0~255までの数値しか扱えない変数になりますが、占有するメモリは1バイトで済みます。
ループカウンタとして使う変数は、このバイト型にすべきなのですが、宣言してないと文字でも数値でもなんでも入る万能型というメモリをアホみたいに占有する変数になってしまいます。
こういうのの積み重ねが、2GBの制約を超えさせる原因にもなるんですよ。
分かりますかね?メモリは無制限に使えるものだとか思ってる低脳開発者の諸君。

TERAは3GBスイッチを設定して起動すると、「おい、3GBスイッチ使ってるみたいだけど、どーなっても知らんからなwww」という旨のメッセージがわざわざ起動前に出ますw
お前らが2GBの制約を守れないずさんなメモリ管理しかできない低レベルの技術しか持ってない事を棚に上げて、「何が起きても俺らの責任じゃねーからなw」とユーザー側にだけ、責任を押し付ける。
呆れましたw
お前らがきちんと2GBの制約をきっちり守れるレベルの高いクライアントを作っていれば、3GBスイッチなんて設定しねーんだよボケが。
それやらないとしょっちゅう落ちるような糞クライアント作っておいて、何言ってやがるって感じでしたわw

結論
・32bit版OSでTERAをやる場合は3GBスイッチの設定は(たぶん)必須
・3GBスイッチは3GBフルに拡張する必要はなく、2GBをちょっと超える程度で良い。
・システムの安定性とアプリケーションが落ちなくなる境目の拡張値は各自で探してねw
(参考までに私は2.5GB=2500で設定してます)

コメントの投稿

非公開コメント

カウンタ
プロフィール

ウホッ!いい男

Author:ウホッ!いい男
異世界転生を待ち続ける中高年のおっさん

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR