32bitと64bit、PCを購入するときなどで目にしたことがあるはずだ。
しかし、その意味を理解しているかというと怪しい人もいるのではないだろうか? なんとなく64bitの方が高性能というイメージだが、実際にどう高性能かはよくわからない。
このページでは32bitと64bitの違いについて簡易にしてまとめてみた。読めば人に簡単に説明できるくらいの知識は身につくだろう。
目次
そもそもbitとは?
「bit」とはコンピュータの扱う情報の最小単位のことであり「binary digit」の略だ。
コンピュータは0もしくは1の羅列でものごとを処理する。コンピュータは最終的にはビットの羅列で全てを表現することになる。1bitは必ず0もしくは1の状態を保持し、それ以外の値はもたない。
コンピュータでは「8bit」が「1byte」となる。
二進数は人からみると少々難解だが、電子的、機械的にみて非常にシンプルであり明確で再現性が確保しやすいので、コンピュータ史において比較的昔から現在にいたっても、二進数、バイナリ、bitが使用されている。
実際には3進数など大きな数の進数でもコンピュータは理論上作成可能だが、構造が2進数のコンピュータとくらべると複雑になる。
そもそも「32bit 64bit 違い」とはどこが基準なのか?
それでは32bitや64bitの説明に移っていこう。
CPUの違い
まず前提として、32bitと64bitというのはCPUの違いだというのをまずは認識してほしい。
32bitではなく16bitのものもあるが、これらは「16bitCPU」「32bitCPU」「64bitCPU」というのを意味しているわけだ。
32bitと64bitの違い
結論からいってしまえば、これらの違いは「記憶装置のbit幅」だ。bit幅というとわかりにくいかもしれないので、容量とか幅とかイメージで捉えてほしい。
この記憶装置を「レジスタ」と呼ぶが、このレジスタのサイズが16bitならば「16bitCPU」となりサイズが64bitならば「64bitCPU」となる。
CPU内部にある記憶装置と聞くと「キャッシュ」を思い浮かべるかもしれない(思い浮かべなくても構わない)。レジスタはキャッシュよりも高速で記憶容量も小さい、コンピュータの記憶装置のなかでは最も高速に動作する記憶装置である。
計算をするために使われるレジスタ
レジスタは漠然とした記憶媒体というよりは「演算の対象や演算結果」を記憶するために使用される。一般的にレジスタが大きいと一度に扱える情報は増える。16bitが一度に処理できる情報は2の16乗すなわち65536であり、これが64bitともなると2の64乗つまり18446744073709551616という途方もない数字になる。
一度に取り扱える情報が増える程大量のデータをさばけるようになるので、処理の高速化もはかれるようになる。また発展とともにbit数が増加すると機能が高度化される。つまりCPUの「便利な命令」が増えるのである。
そのため高速になるが新しい命令をくみこまれていない過去のCPUでは動かないプログラムも出てくる。現在主流のx86の命令をx86_64は実行できるが、その逆は実行できない。「64bitのCPUで32bitの命令を実行することは可能」だが「32bitのCPUで64bitのCPUの命令を実行することは出来ない。」わけだ。
メモリの上限
32bit環境では「メモリ4GBの壁」というものが存在する。32bitPCだと、メモリを4GB以上積んだとしても、使えないのだ。
少し難しいかもれないが、上で説明したように2進数で考えると、32bitならば物理的に4294967296のアドレス空間が存在する。それに1アドレス1byteを割あてることになる。すると4GBまでしか使えないことがわかる。
Windowsの場合は4GBも使えない(ステップアップ解説部分)
実際のところ、Windowsなどの場合ではもっと少ない容量で頭打ちになってしまう。
「なぜ中途半端に頭打ちになるのか?」というと「メモリマップドIO」という仕組みを使っているからだ。メモリマップドIOは、メモリの一部を拝借してIOの制御をすることになる。そのためWindowsではアドレスを一部ハードウェアIOの制御に割り振っている。
そのためWindowsの場合約3.3GBという上限が決められている。メモリマップドIOはメモリを消費するが構造を単純化できるというメリットがある。またメモリを大量に搭載出来る環境ならば大きな問題にはならないため現在において主流だ。
64bitとなるとアドレス空間が非常におおきくなる1844674407370955161Byteまで確保できるようになるので、しばらくは安泰といえる。しかし実際には理論的な壁のまえにOSの実装の壁というものが先にくることになるだろう。
64bitが有利な場面
大規模な処理、高負荷な処理においては32bitのキャパシティに限界がある。
とくにメモリへの制限は致命的といえる。3Dアプリケーションや動画編集、科学計算などはメモリを大きく消費するからだ。
またHDDは3TBが当たり前SSDも長いめで見ると以外にも大容量化のながれでテラバイト単位に到達しつつある。ハードウェア制限という部分で32bitではカバーしきれない部分はすでに多い。
将来という面で圧倒的に64bitが有利なのは間違いない。
どう選べばよいのか?
たしかに32bitの方が安かったりする。また、中古のPCなどで「とにかくインターネットが見られればいい!」という場合などは特に気にせず32bitPCを購入して構わない。
「エンジニアを目指している方」「画像ソフトを使いたい方」「PCでゲームもやりたい方」などは、64bitシステムを選ぶべきだ。
どうしてもレガシーなシステムでなければ動かないアプリケーションがある場合は32bitシステムという選択肢はある。しかし、現代に16bitアプリケーションがほぼなくなったように、将来的に32bitアプリケーションも、ロストテクノロジーとはならないもののほぼ使用されなくなるだろう。
難度高めのTIPS
UEFIとBIOSとパーティションの管理
32bitか64bitとは、すこし離れることになるが、昨今では従来のBIOSでは性能と機能の限界がおとずれたため、その限界を超えるためUEFIが採用されていることが殆どだ。
最新のOSは十中八九このUEFIに対応している、BIOSの場合3TBのHDDは使用できない、厳密には使用できるが2TBでパーティションをしきらなければならなくなる。これはBIOSと組み合わせで使用しているMBRの仕様の関係上生じる制限だ。
パーティションテーブルデータの幅が32bit分しか用意されていないため、2の32乗セクタ×512byte=2,199,023,255,552byteとなっている。またパーティションの数もMBRでは幾つか制約事項があった。
制約を撤回すべくUEFIとGPTパーティション管理がメジャーとなった。3TBのHDDも問題なく認識できることを始め、128のプライマリパーティションを作成できるなどの大幅な強化がなされた。これからOSをインストールする場合UEFIとGPTの組み合わせで管理することをお勧めする。
何故64bit環境で32bitのアプリケーションが動作するのか?
確かにハードウェアレベルで64bit上で32bitのアプリケーションは動作するが、ソフトウェアレベルの話になると「64bitのバイナリだけの環境で32bitは動くのか?」という疑問にあたるはずだ。
実際には「32bitライブラリなどがないと動作しない」そのためWindowsの場合32bitライブラリをデフォルトで同梱している。Linuxの場合、LFSやGentooなどのソースベースのディストリビューションなどで32bitバイナリ抜きの純粋な64bitシステムを構築することが可能になっている。
その場合一切32bitアプリケーションは動作しない。それでもLinuxなどはソースコードベースな文化のなかにあるので、必要ならば、64bitを前提としアプリケーションをコンパイルしなおして64bitバイナリを作成することが出来る。
Linuxの場合32bitライブラリを同梱するかどうか?というのは実用的かどうかではなく拘泥の問題という部分が大きいだろう。
まとめ
このページでは32bitと64bitの違いについてお伝えしてきた。
エンジニアとしても、ITに関連する人でも、PC購入を考えている人でも覚えておきたい知識だ。ぜひ覚えて、人に説明できる程度にはなっておこう。
PCの起動が遅い、64ビットにする方法は
ご愛読いただきありがとうございます。
ご自身のPCが64bitに対応している場合は、
Window10で32bit→64bitへ変更いただけるかと思います。
https://www.microsoft.com/ja-jp/software-download/windows10%E3%80%80
上記、マイクロソフト社公式ページがご参考になるかと存じます。
お世話になります。
会社で64bitパソコンを使用中なのですが、そこに Python3.8.1(64bit)を
インストールしようとしたところ、すでに、Python3.8.2が出ていて、しかし、
これが 32bit版のようです。
この32bit版をインストールすると、何か不具合がでるのでしょうか?
他のソフト(例えばExcel)との連携を考えた場合などに影響出るのでしょうか?
64bitパソコンに、32bit版と64bit版のPythonを両方ともインストールすることが可能です。
64bitパソコンであっても、32bit版がダウンロードされますが、普段のオフィスワークでの使用でしたら問題ないかと思われます。
※大量のメモリ使用するプログラムを動かしたりする際には、64bit版をインストールされることをおすすめします。
また64bitシステムを要求されるライブラリを使用する際には64bit版が必要となる可能性はございます。
引き続き、ご愛読のほど、よろしくお願いいたします。
「パーティションテーブルデータの幅が32bit分しか用意されていないため、2の32乗セクタ×512byte=2,199,023,255,552byteとなっている。」
で、急にわからなくなる。
何故512を掛けるのか分からない。
数字を出すのであれば、分かるように解説してほしい。