4GBパッチと3GBスイッチ

オブリの影響で有名になった(ような気がする)「4GBパッチ」と「3GBスイッチ」について、お節介にも解説してみます!
※更正途中です。間違えなどがあったら優しくコメントください (つД`;
 
いきなりですが、まず結論。

4GBパッチ … 指定アプリケーションが扱えるメモリ上限を2GB以上(~4GB)に拡張する
3GBスイッチ … 32bitOSでユーザーメモリを2GBから3GBへ拡張させる(副作用あり)

似ているようで全く違うので注意!

●32bitOSにおいて

32bitOSにおいては「OS自体が扱えるメモリが最大で4GB」となっています。
なぜかというと、32bitで表せる数字は4Gが限界だからです。

32bit = 2進法で 11111111 11111111 11111111 11111111
= 10進法で 429,4967,295

0~429,4967,295の数字を扱えるので、0を含めると「429,4967,296通り」となります。

429,4967,296 ÷ 1024 = 4,194,304(K) ÷ 1024 = 4096(M) ÷ 1024 = 4(G)

ぴったり4Gですね (゚∀゚)

で、ここからが本題。
32bitOSでメモリを4GB積んでいる場合でも、標準の場合…

・2GBを「OS内部で扱う重要メモリ(カーネルメモリ)として確保する」
・残った2GBを「アプリケーションが扱えるメモリ(ユーザーメモリ)にする」

という管理が行われています。

そんなこんなで、普通のアプリケーション(exeファイル)は「扱うことができるメモリの総量は2GB」ということになっています。

で、ここで登場するのが「4GBパッチ」です。
これはexeファイルの特定のビットを書き換えることで
「このアプリケーション(exeファイル)は2GB以上のメモリを扱えるようにして欲しがってるよ!」
とWindowsに訴えかける状態にします。

もしかすると「exeファイルを改変する4GBパッチは、内部のプログラムを書き換えて処理を変更して4GBのメモリを扱えるようにするという、すごすぎるパッチなのでは!?」と思っている方がおられるかもしれませんが、全然違います。

とりあえず「4GBパッチ」を適用することでそのアプリケーション(exeファイル)が「俺は2GB以上、最大4GBのメモリを扱いたいんだ~!」と訴えることには成功しました。

しかし!!
先ほど説明した通り、32bitOSの標準状態では「ユーザーメモリが2GB」しかありません。
それなのに「2GB以上のメモリを扱いたい!」と言っても無理に決まっています。

どうしましょう…

そうです、ここで登場するのが「3GBスイッチ」です。
これは32bitOSの起動オプションに設定するスイッチです。
※詳しくは後述しますが、これは「危険な設定」なのでここで設定方法を説明しません。

「3GBスイッチとはなんぞや?」

32bitOSの標準状態では

2GB … カーネルメモリ(OS自体が扱う重要メモリ領域)
2GB … ユーザーメモリ(アプリケーションで扱うメモリ領域)

こうなっていますが、「3GBスイッチ」を設定することによって

1GB … カーネルメモリ(OS自体が扱う重要メモリ領域)
3GB … ユーザーメモリ(アプリケーションで扱うメモリ領域)

ユーザーメモリが3GBになったよ! (゚∀゚)
そうです、3GBスイッチとは「ユーザーメモリを3GBに設定するスイッチ」なのです。

これにより、先ほど4GBパッチを適用したアプリケーション(exeファイル)が「2GB以上のメモリを扱える」ようになります。
よかった、よかった…。

全然よくありません!!

ユーザーメモリを3GBに増やしたせいで、カーネルメモリが1GB(元の半分)にまで減らされています。
カーネルメモリはOSの心臓部とも言える重要な領域で、デバイスドライバが存在する領域でもあります。
その領域が半分まで減らされたのです、これによりどんな不具合が起きるかわかりません。
最悪、OSの起動すらできなくなります。
(うちの環境ではビデオカードのドライバが正常動作しなくなりました)

というわけで、あくまで個人的な意見ですが…。
4GBパッチを適用したアプリケーション(exeファイル)の為だけに、32bitOSに「3GBスイッチ」を設定してOSの基本動作を危険な状態にさらすのはオススメできません。

●64bitOSにおいて

次に64bitOSにおける説明です。
64bitOSの場合、最大で扱えるメモリは心配無用の、ものすっごい量です!
(OSの機能制限などにより一般的には128GBまで扱えると考えた方が良さそうです)
(128GBのメモリを搭載できるマザーボードが存在するのかは知りませんがw)

32bitOSに存在していた「3GBスイッチ」なんてものはありません。
だって「扱えるメモリが最大で4GBまで」なんていう制限がないのですから。

た だ し !

「32bitアプリケーション」とか「64bitアプリケーション」とかいう表現を聞いたことがあるのではないでしょうか?
一般的に「64bitOS専用」とか「x64」と書かれているアプリケーションは「64bitアプリケーション」です。
それ以外はすべて「32bitアプリケーション」と考えても差し支えありません。
世の中のほぼすべてのゲームは「32bitアプリケーション」として作られています。

32bitアプリケーションなので結局のところ…
「2GB以上のメモリを扱いたい!という情報が設定されていれば最大で4GBまで扱える」
「その情報が設定されていないのであれば、最大2GBまで扱える」

いくらOSが大量のメモリを詰んでいたとしても、こんな感じです (´・ω・`)
例え128GBの空きメモリがあるOS上で動いていたとしても、32bitアプリケーションである限り「2GB」とか「4GB」とか狭い土俵の中でしか戦えないのです…。

この「俺(このexeファイル)は2GB以上(~4GB)のメモリを扱いたいんだぜ!」と主張する設定は「LARGEADDRESSAWARE」(LAA)と呼ばれています。
これは本来4GBパッチで勝手に改変するのではなくて、exeファイルを作る際のリンカーオプションで設定します。
(要するに開発者の意志でON/OFFする)

私が知る限り「TERA」の実行ファイルでは標準で「LAA」がONになっていました。
「Skyrim」も今後のパッチでこのLAA設定がONにされるようですね。
※2011/12/21 TESV.exe (1.3.10.0)にて、LAAの標準対応を確認(゚∀゚)ktkr!!
最近は64bitOSでゲームをする人が増えていますので、もうこのLAA設定は標準でONにしとけばいいんじゃないの!?なんて単純に思ってしまう素人な私 (´Д`;

2011/12/16 追記
手元のゲームを調べてみたら、最初からLAA設定がONになっているものが結構ありました。
「CoD MW2」「CoD BO」「CoD MW3」「Left 4 Dead 2」「GTA IV」など。

●補足

「LARGEADDRESSAWARE」(LAA)がONの場合「そのアプリケーション(exeファイル)が扱えるメモリが~4GBまで増える」と書いてきましたが、実はこれは正確な表現ではなく、そのアプリケーションが32bitなのか64bitなのかで変わります。

・32bitアプリケーションの場合
2GB以上のメモリを扱えるようになる。
しかし内部処理が32bitなので最大4GBに制限される。

・64bitアプリケーションの場合
「LARGEADDRESSAWARE」(LAA)は標準でONになっている。
内部処理が64bitなので4GBまでという制限はない。

ちなみのこの「exeファイルのLAA設定がONなのかOFFなのか?」は「Microsoft Visual Studio 2010 Express(無料で使えます)」に付属している「dumpbin.exe」というツールで調べることが可能です。
スポンサーサイト

コメント

非公開コメント

プロフィール

r_basilico

バジリコ風味 (r_basilico)
Twitter: r_basilico
Steam: r_basilico
艦これ: 嫁艦は祥鳳

リンク
最新記事
最新コメント
月別アーカイブ
カテゴリ
検索フォーム