フリーソフトをダウンロードしようとすると「x64」と「x32」という2種類を選ぶことがあります。
どちらを選んだらよいかわかりますか?
この記事では、Windows PCでのx64にまつわる、CPU・OS・アプリケーションソフトの話をしたいと思います。
すこし、コンピュータの原理についての話になりますが、もし、わかりにくいところがあれば質問をお願いします。
1. CPUとメモリ
PC向けの CPU は、x86 系、x64 系、IA64 系の 3 種類に大別されます。
CPU | ビット数 | 説明 |
---|---|---|
x86系 | 32 | 少し前に使われていた Pentium 4 や Core Duo(無印) など |
x64系 | 64 | 最近使われている Core2 Duo や Athron64 など |
IA64系 | 64 | サーバ市場向けに使われている Itanium 2 など (=かなり効果で一般向けではないので割愛) |
現在のパソコンの CPU はほとんどが「64 ビット CPU(x64)」になっています。
64 ビット CPU 自体の歴史は長く、2003 年頃から CPU が、そして 2005 年頃から OS も 64 ビット版が出荷されています。つまり、2005年ごろからがx86からx64への移行期ということになります。
一度に処理できる情報量が64ビットになり、64 ビット CPUのコンピュータは扱えるメモリの量が増えます。
32ビットは最大4GBなのに対して、64ビットCPUでは16TBまで拡大しました。
2019年現在では、廉価版のパソコンでもメモリは4GBあり、8GB以上が一般的です。
メモリが少ないと、インターネットなどで複数のサイトを同時に見たりするとすぐに動作が遅くなってしまいます。
したがって、最近のパソコンはまず間違いなくx64系のCPUだと言えます。
1-1. 32ビットなのに「x86」 なのはなぜ?
ちなみに、「x86」でなくて「x32」であればわかりやすいのですが、これはもともと「ビット数」ではなくIntelの「CPUの型番」に由来する数字なのでしょうがないです。
ただ、上の図のように最近はx32と表記されたりもしています。
1-2. CPUと命令セット
これまでいろいろな種類のCPUが開発されてきましたが、型番が違っていても命令セットが同じであれば、同じプログラムを動かすことができます。
逆に言うと、CPUの命令セットが異なれば、同じアプリケーションプログラムは動きません。
命令セット……バイナリデータをプロセッサがどのような命令として動作をするのかを決めているもの。CPUは、プログラムのデータを読み込んで、命令セットに従って解釈して計算や保存などの動作する。
ちなみに、プログラミングでは多くの場合、人間の書いたコードを一旦マシンコードの命令データに変換してから実行している。
IA64 系CPU は、x86 系との命令の互換性に乏しいため、既存の x86 系アプリケーション(=32 ビットアプリケーション)が動作しないことが多いです。
それに対して x64 系CPUの命令セットは、x86 系の上位互換となっているのが大きな特徴です。
2. OSのバージョン
基本的に、x86, x64, IA64 は異なるハードウェアなので、Windows OSは、それぞれに対応してx86 版、x64 版、IA64 版の3つのバージョンが存在します。
ただし、IA64 はサーバ系マシンでしか使われていないため、クライアント系 OS である Windows Vista の場合には、
- Windows Vista x86 版(32 ビット版)
- Windows Vista x64 版(64 ビット版)
の 2 種類のみが提供されています。
2-1. x64 版 Windows OS のフォルダ構造
x64 版 Windows OS では、64, 32 ビットのアプリケーションプログラムがうまく共存動作できるように、フォルダやレジストリなどがきれいに構造化されています。
- Program Files については、x86 版アプリケーション用のフォルダ(Program Files(x86))と、x64 版アプリケーション用のフォルダ(Program Files)が別々に用意されている。
- システムフォルダについても、x86 版(SysWOW64)と、x64 版(system32)の 2 つが用意されている。
2-2. 64ビットCPUのパソコンに32ビットOSをインストールしても動く
ここでちょっとややこしいのが、x64 系 CPU は x86 系 CPU の「上位互換」として設計されていることです。
つまり、もし 64 ビット OS の機能が要らないのであれば、x64 マシン(たとえばCore2 Duo)に、32 ビット版のWindows Vista x86 版をインストールしても動作します。
ただ、現在は搭載メモリが4GBを超えるようになっているので、よほどのことがなければ64ビット版のOSを利用する方がよいと思います。
3. アプリケーションの実行ファイル
普段利用するアプリケーションプログラムのファイル(.exe ファイル)には、通常、CPU が実行するバイナリコードがそのまま格納されています。
このため、まずは原則として
- x86 系の命令で書かれた .exe ファイルは、x86 系 CPU + x86 系 OS の上でしか動作しない。
- x64 系の命令で書かれた .exe ファイルは、x64 系 CPU + x64 系 OS の上でしか動作しない。
- IA64 系の命令で書かれた .exe ファイルは、IA64 系 CPU + IA64 系 OS の上でしか動作しない。
となります。
3-1. エミュレーション機能
ところが、過去に作成されたソフト(x86 系 .exe アプリケーション)が新しい64 ビット OS で使えないと不便です。
そこで、64ビット版 Windows OS では、WOW64 (Windows 32bit on Windows 64bit)と呼ばれるエミュレータ機能を提供しています。
このため、x64 版 Windows または IA64 版 Windows 上でも、x86 版のアプリケーションをエミュレーション動作させることができるようになっています。
エミュレーション……別のマシンの動作を模倣する(emulate)することで、別のマシンのプログラムを実行する機能。主に、古いプログラムや特定のマシンのプログラムを、現在のマシンで利用するのが目的。
※ このエミュレーション動作はすべての x86 版アプリケーションの動作を保障する、ことはできませんが、かなりの互換性があります。
3-2. 32ビット版アプリケーションはいろんな環境で動作する
ということは、32 ビット版アプリケーションはいろんな環境で動作させることができる、ということになります。
逆に、x64 版、あるいは IA64 版のアプリケーションは、CPU/OS ともに同じ環境でなければ動作させることができません。
そこで、64ビットCPUが主流になっても、32ビット版のアプリケーションが公開されることが少なくありません。
例えば Office 2007 (Word や Excel) は x86 版バイナリしか提供されていませんが、x64 版 Windows Vista 上で動作させて利用することができます。
ちなみにWindows OS は、.exe ファイルのヘッダ情報(PE ヘッダ)を確認し、.exe ファイル内のバイナリコードが x86, x64, IA64 のいずれのものであるのかを判別して適切なプロセスを起動します。
PEヘッダ……実行ファイル(.exeファイル)の先頭(ヘッダ:header)にあるデータで、動作ではなくプログラムそのものについての情報を記録している。
4. まとめ:まずx64版をインストールしてみる
それでは、ソフトをダウンロードするときはどちらを選べばよいのでしょうか?
もし、自分のパソコンのCPU・OSが32ビットがわからなければ、まずはx64版を試してみてください。
それで動かなければ、次にx86版を選択してください。
- 64 ビット CPU には、x64 系と IA64 系がある。現在の PC 向け CPUの主流は、x64 である。
- x64 CPU 上に x86 版 Windows OS をインストールすると、従来の 32 ビット CPU と全く同じ動作をさせることができる。
- x64 CPU 上に x64 版 Windows OS をインストールし、x64 バイナリコードで書かれた .exe ファイルを実行すると、64 ビットネイティブでアプリが動作する。
- x64 CPU 上に x64 版 Windows OS をインストールし、x86 バイナリコードで書かれた .exe ファイルを実行すると、WOW64 上で 32 ビットエミュレーションモードでアプリが動作する。