20


1

Windowsアプリケーションを64ビットとしてコンパイルする本当のポイントはありますか?

私たちが書いたアプリケーションの99%は2Gb以上のメモリを扱う必要がないと自信を持って言っています。 もちろん、より多くのRAMに対処するために64ビットを実行する_OS_には多くの明らかな利点がありますが、典型的なアプリケーションが64ビットでコンパイルされる特別な理由はありますか?

12 Answer


18


64ビットで見られるパフォーマンスの改善があります。 良い例は、関数呼び出しの一部のパラメーターがレジスターを介して渡されることです(スタックにプッシュするものが少なくなります)。

*編集*製品を64ビットビルドと32ビットビルドで実行する場合の違いを調べていたときの古いメモを調べました。 クアッドコア64ビットマシンでテストを実行しました。 したがって、32ビットは明らかにエミュレーションモードで実行されていたため、リンゴとオレンジを比較する問題があります。 ただし、http://msdn.microsoft.com/en-us/library/aa384219.aspxを読んだ多くのこと(たとえば、このように)は、WOW64のヒット速度は重要ではないと一貫して言っているようです。 ただし、その記述が正しくない場合でも、アプリケーションはほぼ確実に64ビットOSで実行されます。 したがって、64ビットマシンでの32ビットビルドと64ビットの比較には価値があります。

私が実行したテスト(確かに包括的ではありません)では、32ビットビルドの方が高速なケースは見つかりませんでした。 ただし、64ビットビルドで実行した場合、SQLを集中的に実行した多くの操作(高CPUおよび高I / O)は20%〜50%高速でした。 これらのテストには、かなり「ugい」SQLステートメントと、同時実行性の高いTPCCテストが含まれていました。 もちろん、コンパイラスイッチにかなり依存しているので、独自のテストを行う必要があります。


13


ビルドをリリースしたことがない場合でも、64ビットとしてビルドすると、後で64ビットとしてビルドしてリリースすることを余儀なくされたときに発生する問題を見つけて修復するのに役立ちます。


9


x64には、32ビットコードの実行時には使用できない8つの汎用レジスタがあります。 これは3倍です(ESI、EDI、EBP、ESPを汎用として数えると2倍になります;私はしません)。 これにより、4つ以上の変数を使用する関数のロードとストアを大幅に節約できます。


8


製品のネイティブ64ビットバージョンを提供することのマーケティング価値を過小評価しないでください。

また、できるだけ多くのメモリを必要とするアプリで作業している人の数に驚かれるかもしれません。


5


2GB以上が必要な場合にのみ実行してください。

1つのことは、64ビットコンパイルが(明らかに)64ビットポインターを意味することです。 これは、コードとデータ構造が少し大きくなることを意味し、アプリを意味します。 キャッシュの恩恵が少し少なくなり、仮想メモリに少し頻繁にヒットするなど。

したがって、必要ない場合、基本的な効果は、理由もなくアプリを少し遅くし、肥大化させることです。

とはいえ、時間が経つにつれて、すべてのツールやライブラリなどが書かれているという理由だけで、とにかく64ビットについて気にすることになるでしょう。 アプリが64Kで十分に快適に動作する場合でも、16ビットコードを使用することはほとんどありません-ゲインはそれほど重要ではなく(とにかく小さな高速アプリです)、確かに手間がかかります。 やがて、32ビットがほぼ同じ方法で表示されます。


4


あなたは将来を保証するものと考えることができます。 長い道のりかもしれませんが、64ビットのOSとCPUが遍在する数年先を考えてみてください(32ビットが引き継いだときに16ビットがどのように消えていったかを考えてください)。 アプリケーションが32ビットであり、それまでにすべての競合他社が64ビットに移行している場合、アプリケーションは古い、遅い、または変更できないと見なされる可能性があります。 たぶん、32ビットアプリケーションの1日のサポートが削除されるか、不完全になります(Windows 7は16ビットアプリを適切に実行できますか?)。 すでに64ビットバージョンのアプリケーションをすでに構築している場合は、これらの問題を回避できます。 後まで延期すれば、今から移植するまでの間にもっと多くのコードを書くかもしれません。そうすれば、移植はさらに難しくなります。

多くのアプリケーションでは、技術的な理由はそれほど説得力がありませんが、簡単な場合、今すぐ移植することで将来の労力を節約できます。


1


拡張アドレススペースが必要ない場合、64ビットモードでの配信は何も提供せず、メモリ消費量とキャッシュプレッシャーが増加するなどの欠点があります。

64ビットビルドを提供していますが、限界に達しているお客様は、これらの利点を得るために、メモリ消費を削減するように私たちに促しています。


1


大量のメモリを必要とする可能性のあるすべてのアプリケーション:大量のデータをメモリにキャッシュするデータベースサーバー、大量のデータを処理する科学アプリケーション、…​


1


最近、この記事を読みました。* http://www.agner.org/optimize/optimizing_cpp.pdf [C ++でソフトウェアを最適化する] *。 「2.3オペレーティングシステムの選択」の章では、64ビットシステムと32ビットシステムの利点と不利な点を比較し、Windowsに関するいくつかの具体的な見解を示しています。

マークウィルキンスは、このスレッドで関数呼び出し用のレジスタの追加について既に言及しています。 64ビットシステムのもう1つの興味深い特性は次のとおりです。

「SSE2命令セットは、すべての64ビットCPUおよびオペレーティングシステムでサポートされています。」

SSE2命令は優れた最適化を提供でき、ますます使用されるようになっているため、これは注目に値する機能です。


0


_Fastcall_は、最初の4つのパラメーターをレジスターに保持することにより、サブルーチンの呼び出しを高速化します。