64ビットコンピューティング

64ビットポータブル実行可能ファイル内のセクションテーブルの16進ダンプ。64ビットワードは、16桁の16数で表現できます。

コンピュータアーキテクチャにおいて、64ビット整数メモリアドレス、その他のデータユニット[ a ]は64ビット幅のものです。また、64ビット中央処理装置(CPU) と算術論理装置(ALU) は、そのサイズのプロセッサレジスタアドレスバス、またはデータバスに基づくものです。このようなプロセッサを使用するコンピュータは64ビットコンピュータです。

ソフトウェアの観点から見ると、64ビットコンピューティングとは、64ビットの仮想メモリアドレスを持つマシンコードを使用することを意味します。ただし、すべての64ビット命令セットが完全な64ビット仮想メモリアドレスをサポートしているわけではありません。例えば、 x86-64AArch64は48ビットの仮想アドレスのみをサポートし、残りの16ビットの仮想アドレスはすべて0(000...)またはすべて1(111...)である必要があります。また、いくつかの64ビット命令セットは、64ビット未満の物理メモリアドレスをサポートしています。

64ビットという用語は、64ビットプロセッサが標準となっているコンピュータの世代を指すこともあります。64ビットとは、コンピュータアーキテクチャ、バス、メモリ、CPUの特定のクラス、そして拡張してそれら上で実行されるソフトウェアを定義するワードサイズです。64ビットCPUは、1970年代からスーパーコンピュータ( Cray-1、1975年)で使用され、 1990年代初頭からはRISC(縮小命令セットコンピュータ)ベースのワークステーションサーバーで使用されています。2003年には、x86-64プロセッサとPowerPC G5の形で、64ビットCPUが主流のPC市場に導入されました。

64ビットレジスタは、2の64乗(18または1.8×10の19乗以上)の異なる値を保持できます。64ビットで格納できる整数値の範囲は、使用する整数表現によって異なります。最も一般的な2つの表現では、(符号なし) 2進数として表現した場合の範囲は0から18,446,744,073,709,551,615(2の64乗−1に等しい) 、 2の補数として表現した場合の範囲は−9,223,372,036,854,775,808(−2の63乗)から9,223,372,036,854,775,807(2の63乗−1)です。したがって、64 ビットのメモリ アドレスを持つプロセッサは、2 64バイト (16エクサバイトまたは EB) のバイト アドレス指定可能なメモリに直接アクセスできます。

64ビットコンピュータアーキテクチャは、一般的に64ビット幅の整数レジスタとアドレスレジスタを備えており、64ビットのデータ型とアドレスを直接サポートできます。ただし、CPUによっては、レジスタとは異なるサイズの外部データバスやアドレスバス、さらにはより大きなサイズの外部データバスアドレスバスを備えている場合があります(例えば、32ビットのPentiumは64ビットのデータバスを備えていました)。 [ 1 ]

建築への影響

プロセッサ レジスタは通常、整数浮動小数点単一命令複数データ(SIMD)、制御、および多くの場合アドレス演算用の特殊レジスタのいくつかのグループに分けられます。これらの特殊レジスタは、アドレス レジスタインデックスレジスタ、ベース レジスタなど、さまざまな用途と名前を持ちます。ただし、最新の設計では、これらの機能はより汎用的な整数レジスタによって実行されることがよくあります。ほとんどのプロセッサでは、メモリ内のデータのアドレス指定に使用できるのは整数レジスタまたはアドレス レジスタのみであり、他の種類のレジスタは使用できません。したがって、これらのレジスタのサイズによって、浮動小数点レジスタなどのより幅の広いレジスタが存在する場合でも、直接アドレス指定可能なメモリの量は通常制限されます。

ほとんどの高性能32ビットおよび64ビットプロセッサ(旧式または組み込みARMアーキテクチャ(ARM)および32ビットMIPSアーキテクチャ(MIPS)CPUなどの注目すべき例外)には、統合型浮動小数点ハードウェアが搭載されています。これらのハードウェアは、多くの場合、64ビットのデータ単位に基づいていますが、常にそうであるとは限りません。例えば、x86 / x87アーキテクチャには、64ビット(および32ビット)の浮動小数点値をメモリにロードおよびストアできる命令がありますが、内部の浮動小数点データとレジスタ形式は80ビット幅であるのに対し、汎用レジスタは32ビット幅です。一方、64ビットAlphaファミリは、64ビットの浮動小数点データとレジスタ形式、および64ビットの整数レジスタを使用します。

歴史

多くのコンピュータ命令セットは、単一の整数レジスタに、コンピュータの物理メモリまたは仮想メモリの任意の場所へのメモリアドレスを格納できるように設計されています。したがって、メモリへのアドレスの総数は、多くの場合、これらのレジスタの幅によって決まります。 1960年代のIBM System/360は初期の32ビットコンピュータでした。32ビットの整数レジスタを備えていましたが、アドレスにはワードの下位24ビットのみを使用していたため、アドレス空間は16MiB(16×1024バイト)でした  DEC VAXなど32ビットスーパーミニコンピュータ1970年代に一般的になり、Motorola 68000ファミリや、Intel 80386で始まるx86ファミリの32ビットメンバーなどの32ビットマイクロプロセッサは1980年代半ばに登場し、32ビットは便利なレジスタサイズとして事実上のコンセンサスとなりました。

32ビットのアドレスレジスタは、 2の32乗のアドレス、つまり4GB ランダムアクセスメモリ(RAM)を参照できることを意味しました。これらのアーキテクチャが考案された当時、4GBのメモリは一般的なシステム容量(4MiB)をはるかに超えていたため、アドレス指定には十分な余裕があると考えられていました。42億9000万のアドレスが適切なサイズと考えられたのには、別の重要な理由があります。42億9000万の整数は、データベースなどのアプリケーションにおいて、ほとんどのエンティティに一意の参照を割り当てるのに十分だからです。

1970年代と1980年代のスーパーコンピュータアーキテクチャの中には、 Cray-1 [ 2 ]など、最大64ビット幅のレジスタを使用し、64ビット整数演算をサポートしていたが、64ビットアドレス指定はサポートしていなかった。1980年代半ばに、Intel i860 [ 3 ]の開発が始まり、1989年のリリースで最高潮に達した。i860 は32ビット整数レジスタと32ビットアドレス指定を備えていたため、グラフィックスユニットは64ビット整数演算をサポートしていたものの、完全な64ビットプロセッサではなかった。[ 4 ]しかし、メモリコストの継続的な低下によりRAMの容量が4GBに近づくインストールが実現し、特定の種類の問題を処理するには4GBの上限を超える仮想メモリ空​​間の使用が望ましいようになった1990年代初めまで、32ビットが標準のままであった。これに対応して、MIPSとDECは、当初はハイエンドのワークステーションサーバーマシン向けに、64ビットのマイクロプロセッサアーキテクチャを開発した。1990年代半ばまでには、HAL Computer SystemsSun MicrosystemsIBMSilicon Graphics、およびHewlett-Packardが、ワークステーションとサーバーシステム向けに64ビットアーキテクチャを開発した。この傾向の注目すべき例外はIBMのメインフレームで、当時は32ビットのデータと31ビットのアドレスサイズを使用していた。IBMメインフレームには、2000年まで64ビットプロセッサは含まれていなかった。1990年代には、いくつかの低コストの64ビットマイクロプロセッサが民生用電子機器や組み込みアプリケーションで使用されていた。特筆すべきは、Nintendo 64 [ 5 ]PlayStation 2は、パーソナルコンピューターに導入される前に64ビットマイクロプロセッサを搭載していたことである。ハイエンドのプリンター、ネットワーク機器、産業用コンピューターでも、Quantum Effect Devices R5000などの64ビットマイクロプロセッサーが使用されていました。[ 6 ] 64ビットコンピューティングは、2003年以降、AppleのMacintoshシリーズの一部モデルがPowerPC 970プロセッサー( AppleはG5と呼んでいます)に切り替わり、Advanced Micro Devices(AMD)が初の64ビットx86-64プロセッサーをリリースしたことをきっかけに、パーソナルコンピューターのデスクトップにも浸透し始めました。物理メモリは最終的に32ビットの制限に追いつきました。2023年には、ラップトップコンピューターには一般的に16GBのメモリが搭載され、サーバーには64GB以上のメモリが搭載されるようになり、[ 7 ] 32ビットの4GBのアドレス容量を大幅に超えました。

64ビットデータタイムライン

1961
IBM は、64 ビットのデータ ワードと 32 ビットまたは 64 ビットの命令ワードを使用するIBM 7030 Stretchスーパーコンピュータを出荷しました。
1974
Control Data Corporation は、64 ビット ワード アーキテクチャを採用したCDC Star-100ベクトル スーパーコンピュータをリリースしました(以前の CDC システムは 60 ビット アーキテクチャに基づいていました)。
インターナショナル・コンピューターズ・リミテッド社は、 32ビット、64ビット、128ビットの2の補数整数、64ビットおよび128ビットの浮動小数点数、32ビット、64ビット、128ビットのパック10進数、そして128ビットのアキュムレータレジスタを搭載したICL 2900シリーズを発売しました。このアーキテクチャは、ICLと富士通のマシンを次々と受け継いでいます。最新機種は富士通のSupernovaで、64ビットIntelプロセッサ上でオリジナルの環境をエミュレートします。
1976
Cray Research は、 64 ビット ワード アーキテクチャをベースとし、後の Cray ベクトル スーパーコンピュータの基礎となる最初のCray-1スーパーコンピュータをリリースしました。
1983
Elxsiは、並列ミニスーパーコンピュータ「Elxsi 6400」を発売しました。Elxsiアーキテクチャは、64ビットのデータレジスタと32ビットのアドレス空間を備えています。
1989
インテルは、Intel i860縮小命令セットコンピュータ(RISC)プロセッサを発表しました。「64ビットマイクロプロセッサ」として販売されたこのプロセッサは、基本的に32ビットアーキテクチャを採用し、64ビット整数演算が可能な3Dグラフィックスユニットを搭載していました。[ 8 ]
1993
アタリは、アーキテクチャに64ビット幅のデータパスをいくつか組み込んだAtari Jaguarビデオゲームコンソールを発表しました。[ 9 ]

64ビットアドレスタイムライン

1991
MIPSコンピュータシステムズは、MIPSアーキテクチャの第3版であるMIPS IIIアーキテクチャを実装した最初の64ビットマイクロプロセッサR4000を製造しました。[ 10 ]このCPUは、 IRIS CrimsonをはじめとするSGIグラフィックスワークステーションに使用されています。ケンドールスクエアリサーチは、OSF/1を実行する独自の64ビットRISCプロセッサアーキテクチャをベースにした最初のKSR1スーパーコンピュータを納入しました。
1992
デジタル・イクイップメント・コーポレーション(DEC)は、 PRISMプロジェクトから生まれた純粋な64ビットAlphaアーキテクチャを導入した。[ 11 ]
1994
インテルは、32ビットIA-32プロセッサの後継として、 64ビットIA-64アーキテクチャ(ヒューレット・パッカードと共同開発)の計画を発表しました。1998年から1999年にかけての発売が予定されていました。
1995
サンは64ビットSPARCプロセッサUltraSPARCを発売した。[ 12 ]富士通傘下のHALコンピュータシステムズは、HALが独自に設計した第1世代のSPARC64である64ビットCPUを搭載したワークステーションを発売した。IBMは、最初の64ビットPowerPC ASプロセッサであるA10およびA30マイクロプロセッサをリリースした。[ 13 ] IBMはまた、オペレーティングシステム、データベース、およびアプリケーションを変換できる64ビットAS/400システムアップグレードをリリースした。
1996
任天堂は、MIPS R4000の低価格版をベースにしたビデオゲーム機「Nintendo 64」を発売した。HPは、64ビットPA-RISC 2.0アーキテクチャの最初の実装であるPA-8000をリリースした。[ 14 ]
1998
IBMは、完全な64ビットPowerPC/ POWERプロセッサのPOWER3シリーズをリリースしました。[ 15 ]
1999
IntelがIA-64アーキテクチャ向けの命令セットをリリース。AMDIA-32の64ビット拡張セット「x86-64」(後にAMD64と改名)を公開。
2000
IBM は、最初の 64 ビットz/ArchitectureメインフレームであるzSeries z900を出荷しました。z/Architecture は、32 ビットESA/390アーキテクチャの 64 ビット バージョンであり、32 ビットSystem/360アーキテクチャの後継です。
2001
インテルは、市場投入が幾度となく延期された後、IA-64プロセッサラインを出荷した。現在はItaniumブランドとしてハイエンドサーバーをターゲットとしているが、売上は期待を下回った。
2003
AMDは、x86ベースの最初の64ビットプロセッサアーキテクチャであるAMD64アーキテクチャをベースにしたOpteronおよびAthlon 64プロセッサラインを発表しました。AppleIBM製の64ビット「G5」PowerPC 970 CPUも出荷しました。Intelは、Itaniumチップのみが64ビットプロセッサとして残ると主張しました。
2004
AMDの市場における成功を受け、IntelはAMD64拡張機能のクローンであるIA-32e(後にEM64T、さらにIntel 64に改名)を開発中であることを認めました。Intelは、新しい64ビット命令セットをサポートするXeonおよびPentium 4プロセッサフ​​ァミリーのアップデート版を出荷しています。
VIA TechnologiesがIsaiah 64ビットプロセッサを発表。 [ 16 ]
2006
ソニー、IBM、東芝は、プレイステーション 3、サーバー、ワークステーション、その他の機器で使用するために64 ビットCell プロセッサーの製造を開始しました。インテルは、モバイル、デスクトップ、ワークステーション ライン向けの最初の主流の x86-64 プロセッサーとしてCore 2 Duoをリリースしました。それ以前の 64 ビット拡張プロセッサー ラインは消費者向け小売市場では広く入手できませんでした (64 ビットの Pentium 4/D のほとんどは OEM でした)。64 ビットの Pentium 4、Pentium D、Celeron は歩留まりの問題 (歩留まりの良いウェハーのほとんどはサーバーとメインフレームを対象としていましたが、主流は 2006 年まで 130 nm の 32 ビット プロセッサー ラインのままでした) により 2006 年後半まで量産されず、Core 2 の登場後すぐにローエンドになりました。AMD は最初の 64 ビット モバイル プロセッサーをリリースし、90 nm で製造されました。
2011
ARMホールディングスは、 ARMアーキテクチャファミリーの最初の64ビットバージョンであるARMv8-Aを発表しました。[ 17 ]
2012
ARMホールディングスは、2012年10月30日に、64ビットアーキテクチャに基づく最初のコアであるCortex-A53とCortex-A57コアを発表しました。[ 18 ] [ 19 ]
2013
Apple は、スマートフォンで初の 64 ビット プロセッサを搭載したiPhone 5S 、 A7 ARMv8-A ベースのシステム オン チップ、および64 ビット プロセッサを搭載した初のタブレットであるiPad AiriPad Mini 2を発表しました。
2014
32ビットと64ビットの両方をサポートするRISC-Vが公開された。 [ 20 ] Googleは64ビットTegra K1チップで動作する最初のAndroidデバイスであるNexus 9タブレットを発表した。
2015
Apple は、64 ビット プロセッサ ( A8 ARMv8-A ベースのシステム オン チップ)を採用した初の iPod Touch であるiPod Touch (第 6 世代)と、64 ビット プロセッサを採用した初の Apple TV である Apple TV (第 4 世代)を発表しました。
2018
Apple は、64 ビット プロセッサであるS4 ARMv8-A ベースのシステム オン チップを採用した初の Apple Watch となるApple Watch Series 4を発表しました。
2020
概要: ARC ISAの最初の64ビットバージョンであるARCv3 ISAを発表。[ 21 ] Appleは32ビットアプリケーションをサポートしていないApple M1をリリース。
2023
Qualcomm は、32 ビット ARM アプリケーションをサポートしていないSnapdragon 8 Gen 3Snapdragon X Eliteをリリースしました。

64ビットオペレーティングシステムのタイムライン

1985
クレイはUnixオペレーティングシステムの最初の64ビット実装であるUNICOSをリリースしました。[ 22 ]
1993
DEC は、 Alphaアーキテクチャに基づくシステム向けに、64 ビットのDEC OSF/1 AXP Unix ライクなオペレーティング システム (後に Tru64 UNIX に改名) をリリースしました。
1994
R8000プロセッサのサポートは、 Silicon Graphicsによってリリース 6.0 のIRIXオペレーティング システムに追加されました。
1995
DECは、Alpha向けOpenVMSの最初の完全64ビット版であるOpenVMS 7.0をリリースした。Alphaアーキテクチャ向けの最初の64ビットLinuxディストリビューションがリリースされた。 [ 23 ]
1996
64 ビット モードの R4x00 プロセッサのサポートは、Silicon Graphicsによってリリース 6.2 のIRIXオペレーティング システムに追加されました。
1998
Sun は、完全な 64 ビットUltraSPARCサポートを備えたSolaris 7 をリリースしました。
2000
IBM は、新しいzSeries 64 ビット メインフレーム向けに、 MVSから派生した 64 ビット オペレーティング システムであるz/OSをリリースしました。CPUのリリースにほぼ続いて、z Systems 上の64 ビットLinux がリリースされました。
2001
Linuxはx86-64を完全にサポートした最初のOSカーネルとなった(x86-64プロセッサはまだリリースされていなかったため、シミュレータ上でのサポート)。[ 24 ]
2001
Microsoft は、 Itaniumの IA-64 アーキテクチャ向けにWindows XP 64 ビット エディションをリリースしました。これにより、実行層を通じて32 ビット アプリケーションを実行できるようになりました。
2003
Appleは、 PowerPC 970プロセッサ上でネイティブ64ビット整数演算のサポートを追加したMac OS X 10.3 「Panther」オペレーティングシステムをリリースしました。 [ 25 ]いくつかのLinuxディストリビューションがAMD64のサポートをリリースしました。FreeBSDAMD64のサポートをリリースしました。
2005
1月4日、マイクロソフトはWindows XP 64ビット版の提供を中止した。前年9月以降、IA-64プロセッサ搭載PCが販売されていなかったためである。そして、これに代わるx86-64版Windowsを開発中であると発表した。[ 26 ] 1月31日、サンはAMD64およびEM64TプロセッサをサポートするSolaris 10をリリースした。4月29日、アップルはMac OS X 10.4 "Tiger"をリリースした。これはPowerPC 970プロセッサ搭載マシン上で64ビットコマンドラインアプリケーションを限定的にサポートする。IntelベースMac向けの後継バージョンでは、EM64Tプロセッサ搭載Mac上で64ビットコマンドラインアプリケーションをサポートした。4月30日、マイクロソフトはAMD64およびEM64Tプロセッサ搭載のWindows XP Professional x64 EditionWindows Server 2003 x64 Editionをリリースした。 [ 27 ]
2006
Microsoftは、32ビットとの互換性を維持したAMD64/EM64Tプロセッサ向けの64ビット版を含むWindows Vistaをリリースしました。64ビット版では、すべてのWindowsアプリケーションとコンポーネントが64ビットになりますが、プラグインとの互換性のために、多くのアプリケーションとコンポーネントの32ビット版も含まれています。
2007
Apple は、PowerPC 970 または EM64T プロセッサを搭載したマシンで 64 ビット アプリケーションを完全にサポートするMac OS X 10.5 「Leopard」をリリースしました。
2009
マイクロソフトはWindows 7をリリースした。Windows Vistaと同様に、AMD64/Intel 64プロセッサ向けの完全な64ビット版を搭載しており、ほとんどの新しいコンピュータにはデフォルトで64ビット版が搭載されている。マイクロソフトはまた、64ビットのみに対応した初のサーバオペレーティングシステムであるWindows Server 2008 R2もリリースした。アップルはMac OS X 10.6(Snow Leopard)をリリースした。これはAMD64/Intel64プロセッサ向けの64ビットカーネルを搭載しているが、デフォルトで64ビットカーネルを実行するのは一部の最近のAppleコンピュータモデルのみである。Mac OS X 10.6にバンドルされているアプリケーションのほとんども64ビットになった。[ 25 ]
2010
Windows 7(64ビット)はWindows XP(32ビット)を上回り、Steamで最も人気のあるOSとなった。[ 28 ] [ 29 ]
2011
AppleはMac OS X 10.7(Lion)をリリースしました。これは、対応機種ではデフォルトで64ビットカーネルを実行します。64ビットカーネルを実行できない古い機種では32ビットカーネルが実行されますが、以前のリリースと同様に64ビットアプリケーションを実行できます。Lionは32ビットプロセッサ搭載機種をサポートしていません。Mac OS X 10.7にバンドルされているほぼすべてのアプリケーションも、iTunesを含め64ビットになりました。
2012
マイクロソフトはUEFIクラス3(CSMなしのUEFI )とセキュアブートをサポートするWindows 8をリリースした。[ 30 ]アップルはOS X Mountain Lionをリリースし、以前はサポートされていなかった一部の古いマシンで64ビットカーネルをデフォルトにし、32ビットカーネルを削除した。
2013
Apple はiOS 7をリリースしました。これは、AArch64 プロセッサを搭載したマシンで、64 ビット アプリケーションをサポートする 64 ビット カーネルを備えています。
2014
Google は、64 ビット プロセッサをサポートするAndroidオペレーティング システムの最初のバージョンであるAndroid Lollipopをリリースしました。
2017
AppleはiOS 11をリリースしました。これはAArch64プロセッサ搭載マシンのみをサポートします。64ビットカーネルを搭載し、64ビットアプリケーションのみをサポートします。32ビットアプリケーションとの互換性はなくなりました。
2018
Apple は、64 ビット サポートを導入した最初の watchOS バージョンであるwatchOS 5をリリースしました。
2019
Apple はmacOS 10.15「Catalina」をリリースし、32 ビット Intel アプリケーションのサポートを廃止しました。
2021
Microsoft は10 月 5 日にWindows 11をリリースしましたが、これは IA-32 および AArch32 システムのサポートを廃止し、64 ビット システムのみをサポートします。
2022
Googleは、32ビットアプリケーションのサポートを廃止したPixel 7をリリースしました。Appleは、64ビットプロセッサを搭載したApple Watchモデル(Apple Watch Series 4以降、Apple Watch SE(第1世代)以降、および新しく導入されたApple Watch Ultraを含む)でのみ動作する初のwatchOSバージョンであるwatchOS 9をリリースし32ビットプロセッサを搭載した最後のApple WatchモデルとしてApple Watch Series 3のサポートを廃止しました。
2023
Google はAndroid 14をリリースしましたが、32 ビット アプリケーションのサポートは廃止されました。
2024
Microsoft はWindows 11 2024 Updateをリリースしましたが、その ARM バージョンでは 32 ビット ARM アプリケーションのサポートが廃止されました。

プロセッサの限界

原理的には、64ビットマイクロプロセッサは16 EB(16 × 1024 6 = 2 64 = 18,446,744,073,709,551,616バイト)のメモリをアドレス指定できます。ただし、すべての命令セット、およびそれらの命令セットを実装するすべてのプロセッサが、完全な64ビットの仮想アドレス空間または物理アドレス空間をサポートしているわけではありません。

x86-64アーキテクチャ(2024年3月現在)では、仮想メモリに48ビット、どのプロセッサでも物理メモリに最大52ビットを使用できます。[ 31 ] [ 32 ]これらの制限により、メモリサイズは それぞれ256TB256×1024の4バイト)と 4PB4×1024の5バイト)まで可能です。現在、PCには4 ペタバイトのメモリを搭載できませんが(メモリチップの物理サイズのため)、AMDは大規模サーバー、共有メモリクラスター、および近い将来にこれに近づく可能性のある物理アドレス空間のその他の用途を想定していました。したがって、52ビットの物理アドレスは、完全な64ビット物理アドレスを実装するコストをかけずに、十分な拡張の余地を提供します。同様に、48 ビットの仮想アドレス空間は、4 GB ( 4 × 1024バイト)という 32 ビットの制限の 65,536 (2 16 ) 倍を提供するように設計されており、後で拡張できる余地があり、完全な 64 ビット アドレスを変換するオーバーヘッドが発生しません。

Power ISA v3.0では、実効アドレスとして64ビットが許可され、仮想メモリ用に65~78ビットのセグメントアドレスにマッピングされ、任意のプロセッサでは物理メモリ用に最大60ビットまでが許可されます。[ 33 ]

Oracle SPARCアーキテクチャ2015では、仮想メモリに64ビット、任意のプロセッサに対して物理メモリに40~56ビットが許可されます。[ 34 ]

ARM AArch64仮想メモリシステムアーキテクチャは、仮想メモリに48~56ビット、任意のプロセッサに対して物理メモリに32~56ビットを許可します。[ 35 ]

DEC Alpha仕様では、少なくとも 43 ビットの仮想メモリ アドレス空間 (8 TB) のサポートが求められており、残りのサポートされていないビットがゼロであるかどうかをハードウェアでチェックしてトラップする必要があります (将来のプロセッサとの互換性をサポートするため)。Alpha 21064 は、43 ビットの仮想メモリ アドレス空間 (8 TB) と 34 ビットの物理メモリ アドレス空間 (16 GB) をサポートしていました。Alpha 21164 は、 43 ビットの仮想メモリ アドレス空間 (8 TB) と 40 ビットの物理メモリ アドレス空間 (1 TB) をサポートしていました。Alpha 21264 は、ユーザーが構成可能な 43 ビットまたは 48 ビットの仮想メモリ アドレス空間 (8 TB または 256 TB) と 44 ビットの物理メモリ アドレス空間 (16 TB) をサポートしていました。

64ビットアプリケーション

32ビットと64ビット

32 ビットアーキテクチャから64 ビット アーキテクチャへの変更は根本的な変更です。ほとんどのオペレーティング システムは、新しいアーキテクチャを活用するために、ソフトウェアが実際のメモリ アドレス指定ハードウェアを管理する必要があるため、大幅に変更する必要があります。[ 36 ]他のソフトウェアも新しい機能を使用するために移植する必要があります。古い 32 ビット ソフトウェアは、64 ビット命令セットが 32 ビット命令セットのスーパーセットであるため、64 ビット命令セットをサポートするプロセッサで 32 ビット命令セットのコードも実行できる、ソフトウェアエミュレーション、または 64 ビット プロセッサ内に 32 ビット プロセッサ コアを実際に実装することによってサポートされる場合があります。たとえば、32 ビットx86アプリケーションを実行するためにIA-32プロセッサ コアを搭載した Intel の一部Itaniumプロセッサなどです。これらの 64 ビット アーキテクチャのオペレーティング システムは、通常、32 ビット アプリケーションと 64 ビット アプリケーションの両方をサポートします。[ 37 ]

大きな例外がIBM AS/400で、そのソフトウェアは TIMI ( Technology Independent Machine Interface )と呼ばれる仮想命令セットアーキテクチャ(ISA) にコンパイルされます。TIMI コードは、実行される前に低レベルソフトウェアによってネイティブマシンコードに変換されます。IBM が AS/400 のネイティブ命令セットを古い 32/48 ビット IMPI から新しい 64 ビット PowerPC- AS (コードネームAmazon)に移行したときのように、OS 全体とすべてのソフトウェアを新しいプラットフォームに移行するために書き直す必要があるのは、この変換ソフトウェアだけです。IMPI 命令セットは32 ビットPowerPCとさえ大きく異なっていたため、この移行は特定の命令セットを 32 ビットから 64 ビットに移行するよりもさらに大きなものでした。

x86-64アーキテクチャ(AMD64)を搭載した64ビットハードウェアでは、ほとんどの32ビットオペレーティングシステムとアプリケーションが互換性の問題なく動作します。64ビットアーキテクチャの広いアドレス空間は、デジタルビデオ、科学計算、大規模データベースなどのアプリケーションにおける大規模なデータセットの処理を容易にしますが、他のタスクにおいて、64ビットアーキテクチャまたはその32ビット互換モードが、同価格帯の32ビットシステムよりも高速であるかどうかについては、多くの議論があります。

コンパイルされたJavaプログラムは、変更を加えることなく32ビットまたは64ビットのJava仮想マシン上で実行できます。、、、、、、、、などcharのすべての組み込み型、および配列インデックスとして使用できる型の長さと精度は標準で規定されており、基盤となるアーキテクチャに依存しません。64ビットJava仮想マシン上で実行されるJavaプログラムは、より広いアドレス空間にアクセスできます。[ 38 ]shortintlongfloatdouble

32ビットプロセッサと64ビットプロセッサを比較する際に考慮すべき要素は速度だけではありません。マルチタスク、ストレステスト、高性能コンピューティング(HPC)向けのクラスタリングといったアプリケーションは、適切に導入されれば64ビットアーキテクチャの方が適している場合があります。そのため、IBM、HP、Microsoftなどの大規模組織では、64ビットクラスタが広く導入されています。

まとめ:

  • 64 ビット プロセッサは、64 ビット ソフトウェアで最高のパフォーマンスを発揮します。
  • 64 ビット プロセッサには下位互換性があり、32 ビット バージョンの命令セットで 32 ビット アプリケーション ソフトウェアを実行できるほか、32 ビット バージョンの命令セットで 32 ビット オペレーティング システムの実行もサポートされることがあります。
  • 32 ビット プロセッサは 64 ビット ソフトウェアと互換性がありません。

長所と短所

よくある誤解として、コンピュータに4GB以上のランダムアクセスメモリが搭載されていない限り、64ビットアーキテクチャは32ビットアーキテクチャより優れていないというものがある。[ 39 ]これは完全に真実ではない。

  • 一部のオペレーティングシステムおよび特定のハードウェア構成では、 IA-32システム上の物理メモリ空間が 3 GB に制限されます。これは、3 - 4 GB の領域の大部分がハードウェア アドレス指定用に予約されているためです ( 3 GB の壁を参照)。64 ビットアーキテクチャは 4 GB をはるかに超えるアドレスを指定できます。ただし、Pentium Pro以降の IA-32 プロセッサでは、物理アドレス拡張(PAE) を使用して36 ビットの物理メモリアドレス空間が許可され、64 GB の物理アドレス範囲が提供され、そのうち最大 62 GB をメインメモリで使用できます。PAE をサポートするオペレーティングシステムでは、IA-32 プロセッサ上であっても 4 GB の物理メモリに制限されない場合があります。ただし、ドライバやその他のカーネルモードソフトウェア (特に古いバージョン) は PAE と互換性がない場合があります。これが、32 ビット版のMicrosoft Windowsが4 GB の物理 RAM に制限される理由として挙げられています[ 40 ] (ただし、この説明の妥当性については異論があります[ 41 ] )。
  • 一部のオペレーティングシステムでは、プロセスアドレス空間の一部をOS用に予約しているため、ユーザープログラムがメモリをマッピングできるアドレス空間の総量が実質的に減少します。例えば、32ビット版Windowsでは、カーネル用にアドレス空間全体の1GBまたは2GB(設定によって異なります)が予約されているため、ユーザーモードで使用できるアドレス空間はそれぞれ3GBまたは2GBのみとなります。この制限は64ビット版オペレーティングシステムでは大幅に高くなります。
  • 4GBを超えるファイルが一般的になるにつれ、32ビットアーキテクチャにおけるメモリマップファイルの実装はますます困難になっています。このような大容量ファイルは、一度にファイルの一部しかアドレス空間にマップできないため、32ビットアーキテクチャにメモリマップすることは容易ではありません。また、メモリマップによってこのようなファイルにアクセスするには、マップされた部分を必要に応じてアドレス空間にスワップインしたりスワップアウトしたりする必要があります。これは問題です。なぜなら、OSによって適切に実装されていれば、メモリマップはディスクからメモリへの最も効率的なアクセス方法の1つだからです。
  • エンコーダー、デコーダー、暗号化ソフトウェアなどの一部の 64 ビット プログラムは、64 ビット レジスタから大きなメリットを得ることができますが、3D グラフィックス指向のプログラムなどの他のプログラムのパフォーマンスは、32 ビット環境から 64 ビット環境に切り替えても影響を受けません。
  • x86-64AArch64などの一部の 64 ビットアーキテクチャは、32 ビットアーキテクチャよりも多くの汎用レジスタをサポートしています(ただし、これはワード長に特有のものではありません)。これにより、データが利用可能なレジスタに収まる場合、プロセッサはキャッシュやメインメモリからデータをフェッチする必要がないため、タイトループの速度が大幅に向上します。
Cの例:
int a , b , c , d , e ; for ( a = 0 ; a < 100 ; a ++ ) { b = a ; c = b ; d = c ; e = d ; }
このコードはまず5つの値(a、b、c、d、e)を作成し、それらをループに組み込みます。ループ処理中、このコードはbの値をaの値に、cの値をbの値に、dの値をcの値に、eの値をdの値に変更します。これは、すべての値をaに変更するのと同じ効果があります。
プロセッサがレジスタに保持できる値または変数の数が2つか3つしかない場合、変数dとeも処理するには、メモリとレジスタの間で値を移動する必要があります。これは多くのCPUサイクルを消費する処理です。すべての値と変数をレジスタに保持できるプロセッサは、ループ処理でそれらを処理する際に、反復処理ごとにレジスタとメモリの間でデータを移動する必要はありません。この動作は仮想メモリと簡単に比較できますが、その影響はコンパイラに依存します。

64 ビット アーキテクチャの主なデメリットは、32 ビット アーキテクチャと比較して、同じデータでもメモリ内でより多くのスペースを占有することです (ポインタが長くなったり、他の型が使用される場合や、アライメント パディングが使用される場合など)。これにより、特定のプロセスのメモリ要件が増加し、プロセッサ キャッシュの効率的な使用に影響が出る可能性があります。部分的な 32 ビット モデルを維持することが、この問題に対処する 1 つの方法であり、一般的にかなり効果的です。たとえば、z/OSオペレーティング システムではこのアプローチを採用しており、プログラム コードは 31 ビットのアドレス空間に配置する必要があります (上位ビットは、基盤となるハードウェア プラットフォームでのアドレス計算には使用されません)。一方、データ オブジェクトはオプションで 64 ビット領域に配置できます。このようなアプリケーションのすべてが大きなアドレス空間を必要としたり、64 ビットのデータ項目を操作するわけではないため、これらのアプリケーションではこれらの機能のメリットは得られません。

ソフトウェアの可用性

x86 ベースの 64 ビット システムには、32 ビット アーキテクチャ用に作成されたソフトウェアと同等のものが存在しないことがあります。Microsoft Windows で最も深刻な問題は、旧式のハードウェアに対するデバイス ドライバーの互換性がないことです。ほとんどの 32 ビット アプリケーション ソフトウェアは、IA-64 および AMD64 用のMicrosoft WoW64テクノロジなど、エミュレーションモードとも呼ばれる互換モードで、64 ビット オペレーティング システムで実行できます。64 ビットの Windows ネイティブ モード[ 42 ]ドライバー環境は、64 ビットのNTDLL.DLL上で実行されますが、これは 32 ビット Win32 サブシステム コード (多くの場合、実際のハードウェア機能が Winprinter のようにユーザー モード ソフトウェアでエミュレートされているデバイス) を呼び出すことができません。ほとんどのデバイスの 64 ビット ドライバーは 2007 年初頭 (Vista x64) まで入手できなかったため、64 ビット版の Windows を使用することは困難だと考えられていました。しかし、メモリ価格の低下と 4 GB を超える RAM の使用の増加により、その後 64 ビット コンピューティングへの傾向が強まりました。ほとんどの製造元が新しいデバイスに対して 32 ビット ドライバーと 64 ビット ドライバーの両方を提供するようになったため、64 ビット ドライバーが利用できないことは問題ではなくなりました。多くの古いデバイスには 64 ビット ドライバーが提供されていなかったため、結果として 64 ビット システムで使用できませんでした。

オープンソースドライバでは、32ビット版を64ビット版用に修正できるため、ドライバの互換性の問題は比較的少なかった。一方、2007年初頭以前に製造されたハードウェアのサポートは、オープンソースプラットフォームのユーザー数が比較的少なかったため、問題となっていた。

64ビット版のWindowsでは16ビットソフトウェアは動作しません。ただし、ほとんどの32ビットアプリケーションは問題なく動作します。64ビットユーザーは、 16ビットアプリケーションを実行するために16ビットまたは32ビットオペレーティングシステムの仮想マシンをインストールするか、 NTVDMの代替手段のいずれかを使用する必要があります。[ 43 ]

Mac OS X 10.4 "Tiger" とMac OS X 10.5 "Leopard" は32ビットカーネルのみを搭載していましたが、64ビットプロセッサ上で64ビットユーザーモードコードを実行できました。Mac OS X 10.6 "Snow Leopard" は32ビットカーネルと64ビットカーネルの両方を搭載し、ほとんどのMacでは64ビットプロセッサ上でも32ビットカーネルが使用されていました。これにより、これらのMacは32ビットデバイスドライバをサポートしながら64ビットプロセスをサポートできました。ただし、64ビットドライバとそれに伴うパフォーマンス上の利点は享受できませんでした。Mac OS X 10.7 "Lion" はより多くのMacで64ビットカーネルを搭載し、OS X 10.8 "Mountain Lion" 以降のmacOSリリースでは64ビットカーネルのみが採用されています。 64ビットプロセッサを搭載したシステムでは、32ビットと64ビットの両方のmacOSカーネルで32ビットユーザーモードコードを実行できます。また、macOS Mojave (10.14) までのすべてのバージョンのmacOSには、32ビットアプリケーションが使用するライブラリの32ビット版が含まれているため、macOS用の32ビットユーザーモードソフトウェアはこれらのシステムでも動作します。これらの32ビット版ライブラリは、macOS Catalina (10.15) でAppleによって削除されました。

LinuxをはじめとするほとんどのUnix系オペレーティングシステム、そしてそれらのCおよびC++ツールチェーンは、長年にわたり64ビットプロセッサをサポートしてきました。これらのプラットフォーム向けのアプリケーションやライブラリの多くは、CおよびC++で書かれたオープンソースソフトウェアであるため、64ビット対応であれば64ビット版にコンパイルできます。頻繁なリリースを重視したこのソースベースの配布モデルにより、これらのオペレーティングシステム向けのアプリケーションソフトウェアの入手性はそれほど問題になりません。

64ビットデータモデル

32ビットプログラムでは、ポインタと整数などのデータ型は一般的に同じ長さを持ちます。これは64ビットマシンでは必ずしも当てはまりません。[ 44 ] [ 45 ] [ 46 ]そのため、 C言語やその派生言語であるC++Objective-Cなどのプログラミング言語では、異なるデータ型を混在させることは32ビット実装では可能ですが、64ビット実装では不可能です。

64 ビット マシン上の C および C 派生言語の多くのプログラミング環境では、int変数は 32 ビット幅のままですが、長整数とポインタは 64 ビット幅です。これらは、"Long, Pointer, 64" の略であるLP64データ モデルを持つと言われています。 [ 47 ] [ 48 ]他のモデルとしては、3 つのデータ型すべてが 64 ビット幅のILP64データ モデル、 [ 49 ] [ 48 ]や、整数も 64 ビット幅のSILP64モデルなどがあります。 [ 50 ] [ 51 ]ただし、ほとんどの場合、必要な変更は比較的小さくて簡単なため、よく書かれたプログラムの多くは、変更を加えることなく新しい環境用に再コンパイルするだけで済みます。別の選択肢として、 と を両方とも32 ビットのままにしておくことで、32 ビット コードとの互換性を維持するLLP64モデルがあります。[ 52 ] [ 48 ] LLはlong long整数型を指し、32ビット環境を含むすべてのプラットフォームで少なくとも64ビットです。 intlong

64ビットプロセッサを搭載したシステムの中には、64ビットのlong long整数を追加したILP32データモデルを使用しているものもあり、これは32ビットプロセッサを搭載した多くのプラットフォームでも使用されています。このモデルは、アドレス空間を大幅に小さくする代わりに、コードサイズとポインタを含むデータ構造のサイズを削減するため、一部の組み込みシステムには適しています。x86やARMなどの命令セットでは、64ビット版の命令セットの方が32ビット版よりもレジスタの数が多いため、このモデルによって空間のペナルティなしで追加のレジスタにアクセスできます。これは64ビットRISCマシンでは一般的で、x86ではx32 ABIとして検討されており、最近ではApple Watch Series 4と5で使用されています。[ 53 ] [ 54 ]

64ビットデータモデル
データモデル 短い整数整数整数長い長いポインタ、size_tサンプルオペレーティングシステム
ILP32 16 323264 32Linux システム上の x32 およびarm64ilp32 ABI、MIPS N32 ABI。
LLP64 16 32 32 6464Visual C++およびMinGWを使用したMicrosoft Windows (x86-64、IA-64、ARM64)
LP64 16 32 646464ほとんどのUnixおよびUnix系システム(例:SolarisLinuxBSDmacOS)。Cygwin使用する場合のWindowsz/OS
ILP64 16 64646464HAL Computer Systems による Solaris のSPARC64への移植
SILP64 6464646464従来のUNICOS [ 50 ] [ 51 ] (対 UNICOS/mp など)

現在、多くの64ビットプラットフォーム(Solaris、AIXHP-UX、Linux、macOS、BSD、IBM z/OSなど)はLP64モデルを使用しています。Microsoft WindowsはLLP64モデルを使用しています。LP64モデルの欠点は、aをanに格納すると切り捨てられることです。一方、ポインタをanに変換することはLP64では「正常に」動作します。LLP64モデルでは、その逆の動作となります。これらは標準に完全に準拠したコードには影響しませんが、コードはデータ型の幅について暗黙的な仮定に基づいて記述されることがよくあります。Cコードでは、ポインタを整数オブジェクトにキャストする際には、 ()ではなく( )を使用することをお勧めします。 longintlonguintptr_tlong

プログラミングモデルは特定のコンパイラに合わせて選択されるものであり、同じOS上で複数のプログラミングモデルが共存可能です。ただし、通常はOSのアプリケーションプログラミングインターフェース(API)の主要モデルとして選択されたプログラミングモデルが優先されます。

もう 1 つの考慮事項は、デバイス ドライバーに使用されるデータ モデルです。最近のほとんどのオペレーティング システムでは、ドライバーがオペレーティング システム コードの大部分を占めています (ただし、オペレーティング システムの実行時にはドライバーの多くは読み込まれない可能性があります)。多くのドライバーは、データの操作にポインターを多用し、場合によっては直接メモリ アクセス(DMA) をサポートするハードウェアに特定のサイズのポインターを読み込む必要があります。たとえば、32 ビット PCI デバイスのドライバーが、64 ビット マシンのメモリの上位領域にデータを DMA 送信するようにデバイスに要求した場合、オペレーティング システムからの、デバイスから 4 GB境界を超えるメモリにデータを読み込む要求を満たすことができません。これは、それらのアドレスのポインターがデバイスの DMA レジスタに適合しないためです。この問題は、OS がデバイスのメモリ制限を考慮してドライバーに DMA 要求を生成するか、入出力メモリ管理ユニット(IOMMU) を使用することで解決されます。

現在の64ビットアーキテクチャ

2023 年 8 月現在、プロセッサが製造されている 64 ビット アーキテクチャは次のとおりです。

同じアーキテクチャの32ビット版から派生した64ビットアーキテクチャのほとんどは、32ビット版用に記述されたコードをネイティブに実行でき、パフォーマンスの低下はありません。例えば、x86-64プロセッサはIA-32アプリケーションをフルスピードで実行できます。[ 55 ]このようなサポートは、一般的にバイアーキテクチャサポート、またはより一般的にはマルチアーキテクチャサポートと呼ばれます。

参照

注記

  1. ^浮動小数点数など。

参考文献

  1. ^ Pentiumプロセッサ ユーザーズマニュアル 第1巻:Pentiumプロセッサ データブック(PDF) . Intel . 1993年。
  2. ^ 「Cray-1コンピュータシステムハードウェアリファレンスマニュアル」(PDF) . Cray Research . 1977 . 2013年10月8日閲覧
  3. ^グライムス、ジャック、レス・コーン、バラドワジ、ラジーブ (1989年7~8月). 「Intel i860 64ビットプロセッサ:3Dグラフィックス機能を備えた汎用CPU」 . IEEE Computer Graphics and Applications . 9 (4): 85– 94. Bibcode : 1989ICGA....9d..85G . doi : 10.1109/38.31467 . S2CID 38831149. 2010年11月19日閲覧 
  4. ^ 「i860 プロセッサ ファミリ プログラマーズ リファレンス マニュアル」(PDF) . Intel . 1991 . 2019年9月12日閲覧
  5. ^ 「NEC、高コストパフォーマンスの64ビットRISCマイクロプロセッサ2機種を発表」(プレスリリース)。NEC 。1998年1月20日。 2011年1月9日閲覧。VR4300プロセッサの各バージョンは、人気のNintendo 64™ビデオゲームや、最近発表され数々の賞を受賞したHewlett-Packard LaserJet 4000プリンタファミリなどの高度なレーザープリンタを含む、コンシューマおよびオフィスオートメーションアプリケーションで広く使用されています。
  6. ^ MIPS R5000マイクロプロセッサの技術的背景(PDF)、MIPS Technologies, Inc 、 2024年8月19日取得
  7. ^ 「DDR5 | DRAM」 . Samsung Semiconductor Global . 2025年1月19日閲覧。
  8. ^ "i860 64ビットマイクロプロセッサ" . Intel. 1989年. 2011年3月19日時点のオリジナルよりアーカイブ。 2010年11月30日閲覧
  9. ^ “アタリ・ジャガーの歴史” .アタリアゲ
  10. ^ Joe Heinrich (1994). MIPS R4000 マイクロプロセッサ ユーザーズマニュアル(第2版). MIPS Technologies, Inc.
  11. ^ Richard L. Sites (1992). 「Alpha AXPアーキテクチャ」. Digital Technical Journal . 4 (4). Digital Equipment Corporation.
  12. ^ Gwennap, Linley (1994年10月3日). 「UltraSparcがSPARCのパフォーマンスを解き放つ」.マイクロプロセッサレポート. 8 (13). MicroDesign Resources.
  13. ^ Bishop, JW; et al. (1996年7月). 「PowerPC AS A10 64ビットRISCマイクロプロセッサ」. IBM Journal of Research and Development . 40 (4). IBM Corporation: 495–505 . doi : 10.1147/rd.404.0495 .
  14. ^ Gwennap, Linley (1994年11月14日). 「PA-8000は複雑さとスピードを兼ね備えている」.マイクロプロセッサレポート. 8 (15). MicroDesign Resources.
  15. ^ FP O'Connell; SW White (2000年11月). 「POWER3: 次世代PowerPCプロセッサ」. IBM Journal of Research and Development . 44 (6). IBM Corporation: 873–884 . doi : 10.1147/rd.446.0873 .
  16. ^ 「VIA、次世代Isaiahプロセッサコアの詳細を発表」(プレスリリース)VIA Technologies, Inc. 2007年10月11日時点のオリジナルよりアーカイブ。 2007年7月18日閲覧
  17. ^ 「ARMv8 テクノロジープレビュー」(PDF) 2011年10月31日. 2011年11月11日時点のオリジナル(PDF)からアーカイブ。 2012年11月15日閲覧
  18. ^ 「ARM、世界で最もエネルギー効率の高い64ビットプロセッサ、Cortex-A50シリーズを発表」(プレスリリース)。ARMホールディングス。 2012年10月31日閲覧
  19. ^ 「ARM基調講演:ARM Cortex-A53およびARM Cortex-A57 64ビットARMv8プロセッサを発表」 ARMdevices.net 2012年10月31日。
  20. ^ Asanović, Krste ; Patterson, David A. (2014年8月6日).命令セットは無料であるべき:RISC-Vの事例(PDF) . カリフォルニア大学バークレー校 EECS 学科. UCB/EECS-2014-146.
  21. ^ 「Synopsys、新しい64ビットARCプロセッサIPを発表」2022年3月31日時点のオリジナルよりアーカイブ。
  22. ^ Stefan Berka. 「Unicos オペレーティングシステム」 . www.operating-system.org. 2010年11月26日時点のオリジナルよりアーカイブ。 2010年11月19日閲覧
  23. ^ Jon "maddog" Hall (2000年6月1日). 「私の人生とフリーソフトウェア」 . Linux Journal .
  24. ^ Andi Kleen. Linuxのx86-64への移植(PDF) . Ottawa Linux Symposium 2001.現状: カーネル、コンパイラ、ツールチェーンは動作しています。カーネルは起動し、シミュレータ上で動作し、ユーザーランドと実行プログラムの移植に使用されています。
  25. ^ a b John Siracusa (2009年9月). 「Mac OS X 10.6 Snow Leopard: the Ars Technica review」 . Ars Technica . p. 5. 2009年10月9日時点のオリジナルよりアーカイブ。 2009年9月6日閲覧
  26. ^ Joris Evers (2005年1月5日). 「Microsoft、Itanium版Windows XPを廃止」 Computerworld. 2013年6月18日時点のオリジナルよりアーカイブ。 2017年10月17日閲覧
  27. ^ 「Microsoft、Windows Server 2003およびWindows XP Professionalの64ビット版の提供開始により速度制限を引き上げる」(プレスリリース)。Microsoft。2005年4月25日。 2015年9月10日閲覧
  28. ^ 「Steamハードウェア調査」 . Valve Software. 2010年12月4日. 2010年12月4日時点のオリジナルよりアーカイブ。
  29. ^ 「Windows 7 64ビット版が最も使用されているOS」。Bit-Tech。2010年8月4日。
  30. ^ 「Dell BizClient プラットフォーム上の UEFI」(PDF)
  31. ^ 「AMD64プログラマーズ・マニュアル 第2巻:システムプログラミング」 Advanced Micro Devices. 2025年6月. p. 127.
  32. ^ 「Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル 第 3A 巻: システム プログラミング ガイド、パート 1」(PDF)。Intel。2016 年 9 月。p. 4-2。
  33. ^ 「Power ISA バージョン3.0」 IBM 2015年11月30日、p.983。
  34. ^ 「Oracle SPARC Architecture 2015 Draft D1.0.9」(PDF) . Oracle . 2016年11月16日. p. 475. 2020年4月22日時点のオリジナル(PDF)からのアーカイブ。
  35. ^ 「AプロファイルアーキテクチャのARMアーキテクチャリファレンスマニュアル」。2024年11月30日。セクションD8.1.6「実装された物理アドレスサイズ」、セクションD8.1.8「サポートされている仮想アドレス範囲」。
  36. ^ Mashey, John (2006年10月). 「64ビットへの長い道のり」 . ACM Queue . 4 (8): 85– 94. doi : 10.1145/1165754.1165766 .
  37. ^ 「Windows 7: 64ビット vs 32ビット?」 W7フォーラム。2009年4月2日。2009年4月5日時点のオリジナルよりアーカイブ。 2009年4月5日閲覧
  38. ^ 「Java HotSpot VMに関するよくある質問」 . Oracle . 2024年12月13日閲覧
  39. ^ 「32ビット版Windows Vistaと64ビット版Windows Vistaの違いについての説明」 。 2011年10月15日時点のオリジナルよりアーカイブ。 2011年10月14日閲覧
  40. ^ Mark Russinovich (2008年7月21日). 「Windowsの限界に挑戦:物理メモリ」 . 2017年4月7日時点のオリジナルよりアーカイブ2017年3月9日閲覧。
  41. ^ Chappell, Geoff (2009年1月27日). 「32ビットWindows Vistaのライセンスメモリ」 . geoffchappell.com . WP:SPS . 2017年3月9日閲覧
  42. ^ 「ネイティブアプリケーションの内部」 Technet.microsoft.com、2006年11月1日。2010年10月23日時点のオリジナルよりアーカイブ2010年11月19日閲覧。
  43. ^リンカーン・スペクター (2013年8月12日). 「新しいPCで古いプログラムを実行する」 .
  44. ^ Peter Seebach (2006). 「POWER5での64ビット開発の探究:コードの移植性は実際どの程度か?IBM .
  45. ^ヘンリー・スペンサー。「Cプログラマーのための十戒」
  46. ^ 「The Story of Thud and Blunder」 . Datacenterworks.com . 2010年11月19日閲覧。
  47. ^ 「ILP32 および LP64 データ モデルとデータ型のサイズ」。z /OS XL C/C++ プログラミング ガイド
  48. ^ a b c「64ビットプログラミングモデル」 。 2020年6月5日閲覧
  49. ^ 「ILP64インターフェースとLP64インターフェースの使用」 Intel 202512月19日閲覧
  50. ^ a b「Cray C/C++リファレンスマニュアル」 . 1998年8月. 表9-1. Cray Researchシステムのデータ型マッピング. 2013年10月16日時点のオリジナルよりアーカイブ2013年10月15日閲覧。
  51. ^ a b「Cray CおよびC++リファレンスマニュアル(8.7)S-2179」 。 2020年6月24日閲覧
  52. ^ 「抽象データモデル - Windowsアプリケーション」。2018年5月30日。
  53. ^ 「ILP32 for AArch64 ホワイトペーパー」 ARM Limited、2015年6月9日。2018年12月30日時点のオリジナルよりアーカイブ2018年10月9日閲覧。
  54. ^ 「2018年のAppleデバイス」。woachk、セキュリティ研究者。2018年10月6日。
  55. ^ stevewhims. 「ゲーム開発者のための64ビットプログラミング - Win32アプリ」 . learn.microsoft.com . 2025年10月22日閲覧