概要
本シリーズでは、自分が新卒1年目のときに知りたかった(≒理解に苦労した)事項を説明していきます。
当時の調べ方が悪かったんじゃないかとか、今はAIがあるから不要じゃないかとか色々考えられますが、自分の理解を整理することを主目的としてやります。
本記事では、32bitと64bitの違いを説明します。
①「OSの種類」「ソフトの種類」「CPUの種類」として存在している
32bitと64bitといっても、何個かの種類があります。
つまり、「32bit版のOSと64bit版のOSがある」かつ「32bit版(用)のソフトと64bit版(用)のソフトがある」かつ「32bitに対応したCPUと64bitに対応したCPUがある」ということです。
当然ながら、exeはOSの上で動かすもので、OSはハードにインストールするもの、と主従関係があります。ですので、CPUが64bitならOSも64bit、OSが64bitならexeも64bit、というのが普通です。
32bitが旧、64bitが新
そもそも32bitと64bitとは単語としてどういう意味かというと、bit数が32と64ということです。(当然ですが)
昔はハードの技術的制約か何かで、32bit一塊で処理するしかない状況でした。後に64bit一塊で処理する技術が登場して、高性能なため主流になりました。1
そこと照らし合わせると分かりやすいのですが、32bitにしか対応していないCPUに64bitのOSはインストールできませんし、32bitOS上で64bitのexeは動かせません。
そして新しい方である64bitは後方互換性を保っている場合が多いです。つまり、32bitOSは64bitCPUにインストールできますし、32bitのexeは64bitOS上で動きます。ここは詳しくは後で述べます。
②各レイヤーの詳細
exe(ソフト)の種類
まずはそんなにややこしくない、exeの種類です。
多くのソフトは32bit版と64bit版の両方が用意されていて、インストーラーも両方あります。古いものだと32bit版しかなかったりしますが。
前述のとおり最近はほとんどが64bitOSですので、基本的には64bit版をインストールすればよいです。
ソフト開発者としても、64bitの方がメモリ容量などの制限が緩く性能もいいため、32bitを積極的に採用する理由は基本的にありません。
なお、32bitのソフトを動かすと、タスクマネージャーにも32ビットと表示されます。

手近にあった32ビットアプリのDesignDollを動かしてみました。タスクマネージャーにこんな感じで表示されます。
Windowsだとprogram files(x86)フォルダ配下にインストールされてるのが32bitソフト(の可能性があるもの)です。
まれにexeにも命令セットを指定するものがありますが、いったん省きます。
OSの種類
次に、OSの種類です。
Windows10には、Home/Pro/Education/Enterpriseの全てで32bit版と64bit版両方が用意されています(参考:wikipedia)
最近のOSはほぼすべてが64bit版といっていい気がします。Windows11では32bit版がなくなりました。
他のOSについては未調査です。
64bitOSでも32bitアプリが動く
64bit版のWindowsではWOW64という仕組みがあって、32bitアプリが動くようになっています。
直接関係はないのですが、こちらも参考になるかと思います。
ARM版の存在
windows11では、32bitと64bitの違いのほかにARM版というものが用意されています。
これが何者かは命令セットアーキテクチャを理解しないとわかりませんので後述します。
CPUの種類
CPUは、OSやソフトのように「32bit版」「64bit版」が用意されているというよりは、対応する命令セットアーキテクチャがそれぞれ異なるという違いがあります。
これ以降は、公式ドキュメントなどによる裏どりができていません。ざっくり自分の理解をまとめた程度のものと思ってください。ご指摘もお待ちしています。
少し長くなるので、先に要点を述べます:
- Intelの64bitアーキテクチャであるx86_64は32bitアーキテクチャであるx86の拡張であるため、32bit命令が動く。
- 浮動小数点演算をサポートする拡張命令セットが定番でついており、対応状況はCPUによってさまざま
主要な命令セットアーキテクチャ
CPUには、バイナリを渡すことで命令をし、動かします。この命令一つ一つは単なるバイナリにすぎませんが、それを集めたものを命令セットといい、特に重要な(日常的に使う)命令を集めたものを命令セットアーキテクチャといいます。
x86
Intel が開発した命令セットアーキテクチャで、もともとは 16bit から始まり、後に 32bit(IA-32)へと拡張されました。
x86_64
x86を拡張したもので、64bitの命令を含みます(基本的な動作はすべて64bit命令で行えます)。
AMDがx86を64bit化したものが**x86_64(AMD64)**で、現在ではIntelもこの仕様を採用しています。
x64はx86_64の別名です。
最近のIntelが販売しているCPUは大概x64だと思います。
ここまでのことから、最近の64bitCPUはx86の拡張であるので、32bit命令が普通に使えるといえます。
ARM
macに入っているものです。ARM64(AArch64)というのが64bit版の命令セットのようです。
拡張命令セット
x86 / x86_64の拡張として、浮動小数点演算に特化した拡張が代表的です。(x64の拡張でもあります)
SSEシリーズ、AVXシリーズ
SSE, SSE2, SSE3, SSE4.1, SSE4.2,...や、AVX-2, AVX-512, ...といった拡張命令セットがあり、浮動小数点演算の高速化に役立ちます。
一度に複数の演算を実行するような技術で、動画の再生/編集や、AIの処理に貢献しているようです。
まとめ
- 32bitと64bitの違いがまとめられた。
- 新規にソフトを開発する場合は64bit版のみでよい。
最後までお読みいただきありがとうございました。