1

このガイドと、Visual Studio コマンド プロンプトを使用して VS 2010 IDE ディレクトリから次のコマンドを実行することを提案するインターネット上のいくつかのガイドを見つけました。

editbin /largeaddressaware devenv.exe

これを実行しましたが、これまでのところすべて正常に動作しているようです(まだ問題は発生していません)。しかし、情報が見つからないのは、Visual Studio 2010 で 2 GB を超える RAM を使用することによって、どのような悪影響があるかということです。Visual Studio は、最大 2 GB の RAM を使用するように構築されています。VS が 2 GB を超える RAM を使用することを意図していた場合、バイナリをハッキングする必要はありません (笑)。私はズボンの席で飛んで、最悪の事態に備えずに新しいことに挑戦するのが好きですが (それは私が得意なすべてです、ハハ)、少なくとも、何か問題が発生した場合に対処する準備をしておくべき問題を知りたいです。うまくいかない。

TL;DR; : 上記の「editbin」コマンドを使用して Visual Studio 2010 に 2 GB を超えるメモリ アドレスを認識させることにより、どのような悪影響がありますか?

4

3 に答える 3

3

largeaddressaware を有効にすることのマイナスの影響は、アプリケーションが異常な方法でクラッシュまたはメモリを破損する可能性があることです。このプログラムは、処理する必要のあるポインター値が 2GB を超えることはないと想定して作成されました。これは微妙な方法で行うことができます。標準的な例は、おそらくポインター間の中間アドレスを計算しています。

ptrMid = (ptr1 + pt2) / 2;

すべてのポインターが 2GB 未満の場合はうまく機能しますが、そうでない場合は、オーバーフローのために誤った結果が得られます。

ptrMid = (0x80000000 + 0x80000004) / 2 = 0x0000002, not 0x80000002

Visual Studio が 2 GB を超えるポインターを処理できないことを心配する必要があるだけでなく、すべてのアドインもこの影響を受けます。

largeaddressaware を有効にする前に確認する必要があるその他の事項については、この質問を参照してください。次の質問を参照してください: アプリケーションをラージ アドレスに対応させるにはどうすればよいですか?

自分が制御していないアプリケーションでは、editbin を使用して largeaddressaware を変更しないでください。

于 2013-05-29T23:29:37.370 に答える
2

この議論を読んで既存のヘッダーを確認した後、VS2010 には既にこの機能が適用されているように見えますが、少なくとも私のインストール (64 ビット win7) ではそうです。既にコンパイルされている場合は、悪い副作用について心配する必要はないと思います。

于 2013-05-29T23:35:58.450 に答える
0

これは仕様によるものと思われます。

/3GB スイッチが設定されている場合でも、32 ビット プログラムは、/LARGEADDRESSAWARE フラグを渡すことによって 2GB を超えるアドレスに対処する意志を示さない限り、2GB のアドレス空間しか受け取らないことを思い出してください。

このフラグは、64 ビット Windows でも同じことを意味します。しかし、64 ビット Windows では使用可能なアドレス空間がはるかに大きいため、32 ビット Windows プログラムに 4 GB のアドレス空間全体を使用する余裕があります。これは、ナレッジ ベースの記事 Q889654の表「Windows の 32 ビット バージョンと 64 ビット バージョンにおけるメモリと CPU の制限の比較」で偶然に言及されています。

つまり、特定のカテゴリの 32 ビット プログラム (つまり、アドレス空間が限られているプログラム) は、64 ビットの機能を明示的に利用していなくても、64 ビットの Windows マシンで実行することでメリットが得られます。

http://blogs.msdn.com/b/oldnewthing/archive/2005/06/01/423817.aspx

Editbinは Microsoft のユーティリティであるため、基本的には機能すると主張しています。

于 2013-05-29T23:08:05.620 に答える