Computer architecture bit width
64ビットポータブル実行可能 ファイル内のセクションテーブルの 16進ダンプ 。64ビット ワードは、16桁の16 進 数で表現できます 。
コンピュータアーキテクチャ において 、 64ビット 整数 、 メモリアドレス 、その他の データ ユニット [a]は、64 ビット 幅のものです 。また、64ビット 中央処理装置 (CPU)と 算術論理装置(ALU)は、そのサイズの プロセッサレジスタ 、 アドレスバス 、または データバス に基づくものです 。このようなプロセッサを使用する コンピュータ は、64ビットコンピュータです。
ソフトウェアの観点から見ると、64ビットコンピューティングとは、 64ビットの 仮想メモリアドレスを持つ マシンコード を使用することを意味します。ただし、すべての64ビット命令セットが完全な64ビット仮想メモリアドレスをサポートしているわけではありません。例えば、 x86-64 と AArch64 は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 Systems 、 Sun Microsystems 、 IBM 、 Silicon 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 アーキテクチャ向けの 命令セット をリリース 。AMD は IA-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プロセッサラインを発表しました。Apple は IBM製の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 Air と iPad 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 3 と Snapdragon 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 のサポートをリリースしました 。FreeBSD も AMD64のサポートをリリースしました。
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 Edition と Windows Server 2003 x64 Editionをリリースした。 [27]
2006
マイクロソフトは 、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もリリースしました。Appleは Mac OS X 10.6 (Snow Leopard)をリリースしました。これはAMD64/Intel64プロセッサ向けの64ビットカーネルを搭載していますが、デフォルトで64ビットカーネルを実行するのは一部のAppleコンピュータの最新モデルのみです。Mac OS X 10.6にバンドルされているアプリケーションのほとんども64ビットになりました。 [25]
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 をリリースした。 [28] アップルは 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
マイクロソフトは10 月 5 日に Windows 11 をリリースしましたが、これは IA-32 および AArch32 システムのサポートを廃止し、64 ビット システムのみをサポートします。 [ 引用が必要 ]
2022
Googleは Pixel 7 をリリースしたが、32ビットアプリケーションのサポートは廃止された。Appleは watchOS 9 をリリースした。これは、64ビットプロセッサ搭載のApple Watchモデル(Apple Watch Series 4以降、 Apple Watch SE(第1世代) 以降、そして新たに導入された Apple Watch Ultraを含む)専用となる初のwatchOSバージョンであり、 Apple Watch Series 3は 32ビットプロセッサ搭載の最後のApple Watchモデルとしてサポートを廃止した 。 [ 要出典 ]
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月現在 [update] )では、仮想メモリに48ビット、どのプロセッサでも物理メモリに最大52ビットを使用できます。 [29] [30] これらの制限により、メモリサイズは それぞれ 256TB ( 256×1024の 4 バイト )と 4PB ( 4×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ビットまで許可されます。 [31]
Oracle SPARC アーキテクチャ2015では、仮想メモリに64ビット、任意のプロセッサに対して物理メモリに40~56ビットが許可されます。 [32]
ARM AArch64 仮想メモリシステムアーキテクチャは、仮想メモリに48~56ビット、任意のプロセッサに対して物理メモリに32~56ビットを許可します。 [33]
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ビットアーキテクチャへ の変更は根本的な変更であり、ほとんどの オペレーティングシステムは 、新しいアーキテクチャを活用するために大幅な変更が必要となる。これは、ソフトウェアが実際のメモリアドレス指定ハードウェアを管理する必要があるためである。 [34] 他のソフトウェアも、新しい機能を使用するために 移植する 必要がある。古い32ビットソフトウェアは、64ビット命令セットが32ビット命令セットのスーパーセットであるため、64ビット命令セットをサポートするプロセッサで32ビット命令セットのコードも実行できる、ソフトウェアエミュレーション、 または 64ビットプロセッサ内に32ビットプロセッサコアを実際に実装することによってサポートされる可能性がある。例えば、 Intelの一部の Itaniumプロセッサには、32ビット x86アプリケーションを実行するための IA-32 プロセッサコアが搭載されていた 。これらの64ビットアーキテクチャのオペレーティングシステムは、通常、32ビットアプリケーションと64ビットアプリケーションの両方をサポートする。 [35]
大きな例外が 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プログラムは、より広いアドレス空間にアクセスできます。 [36] shortintlongfloatdouble
32ビットプロセッサと64ビットプロセッサを比較する際に考慮すべき要素は速度だけではありません。マルチタスク、ストレステスト、 高性能コンピューティング (HPC)向けのクラスタリングといったアプリケーションは、適切に導入されれば64ビットアーキテクチャの方が適している場合があります。そのため、IBM、HP、Microsoftなどの大規模組織では、64ビットクラスタが広く導入されています。
まとめ:
64 ビット プロセッサは、64 ビット ソフトウェアで最高のパフォーマンスを発揮します。
64 ビット プロセッサには 下位互換性 があり、32 ビット バージョンの命令セットで 32 ビット アプリケーション ソフトウェアを実行できるほか、32 ビット バージョンの命令セットで 32 ビット オペレーティング システムの実行もサポートされることがあります。
32 ビット プロセッサは 64 ビット ソフトウェアと互換性がありません。
長所と短所
よくある誤解として、コンピュータに4GB以上の ランダムアクセスメモリ が搭載されていない限り、64ビットアーキテクチャは32ビットアーキテクチャより優れていないというものがある。 [37] これは完全に真実ではない。
一部のオペレーティングシステムおよび特定のハードウェア構成では、 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 に制限される理由として挙げられています (ただし、この説明の妥当性は異論があります [39] ) 。
一部のオペレーティングシステムでは、 プロセス アドレス空間 の一部をOS用に予約しているため、ユーザープログラムがメモリをマッピングできるアドレス空間の総量が実質的に減少します。例えば、32ビット版Windowsでは、カーネル用にアドレス空間全体の1GBまたは2GB(設定によって異なります)が予約されているため、ユーザーモードで使用できるアドレス空間はそれぞれ3GBまたは2GBのみとなります。この制限は64ビット版オペレーティングシステムでは大幅に高くなります。
4GBを超えるファイルが一般的になるにつれ、32ビットアーキテクチャにおけるメモリマップファイルの 実装はますます困難になっています。このような大容量ファイルは、一度にファイルの一部しかアドレス空間にマップできないため、32ビットアーキテクチャにメモリマップすることは容易ではありません。また、メモリマップによってこのようなファイルにアクセスするには、マップされた部分を必要に応じてアドレス空間にスワップインしたりスワップアウトしたりする必要があります。これは問題です。なぜなら、OSによって適切に実装されていれば、メモリマップはディスクからメモリへの最も効率的なアクセス方法の1つだからです。
エンコーダ、デコーダ、暗号化ソフトウェアなどの一部の 64 ビット プログラムは、64 ビット レジスタから大きなメリットを得ることができます [ 引用が必要 ]。 一方、3D グラフィックス指向のプログラムなどの他のプログラムのパフォーマンスは、32 ビット環境から 64 ビット環境に切り替えても影響を受けません。 [ 引用が必要 ]
x86-64 や AArch64 などの一部の 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ネイティブモード [40] ドライバ環境は、64ビット NTDLL.DLL 上で実行されるが、これは32ビットWin32サブシステムコード(実際のハードウェア機能がWinプリンターのようにユーザーモードソフトウェアでエミュレートされているデバイスが多い)を呼び出すことができない。ほとんどのデバイスの64ビットドライバは2007年初め(Vista x64)まで利用できなかったため、64ビットバージョンのWindowsを使用することは課題と考えられていた。しかし、メモリ価格の低下と4GBを超えるRAMの使用の増加に伴い、その後は64ビットコンピューティングへと移行した。ほとんどの製造元が新しいデバイスに対して 32 ビット ドライバーと 64 ビット ドライバーの両方を提供するようになったため、64 ビット ドライバーが利用できないことは問題ではなくなりました。多くの古いデバイスには 64 ビット ドライバーが提供されていなかったため、結果として 64 ビット システムで使用できませんでした。
オープンソースドライバでは、32ビット版ドライバを64ビット版用に修正できるため、ドライバの互換性の問題はそれほど大きくありませんでした。一方、2007年初頭以前に製造されたハードウェアのサポートは、オープンソースプラットフォームでは 比較的ユーザー数が少なかったため、
問題となっていました [ 要出典 ] 。
64ビット版のWindowsでは 16ビットソフトウェアは 動作しません。ただし、ほとんどの32ビットアプリケーションは問題なく動作します。64ビットユーザーは、 16ビットアプリケーションを実行するために16ビットまたは32ビットオペレーティングシステムの 仮想マシンをインストールするか、 NTVDM の代替手段のいずれかを使用する必要があります 。 [41]
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ビットマシンでは必ずしも当てはまりません。 [42] [43] [44]そのため、 C言語やその派生言語である C++ 、 Objective-C などの プログラミング言語では、データ型を混在させることは 32ビット実装では可能ですが、64ビット実装では不可能です。
64ビットマシン上のCおよびC派生言語の多くのプログラミング環境では、 int変数は32ビット幅のままですが、長整数とポインタは64ビット幅です。これらは 、"Long, Pointer, 64"の略語である LP64 データモデルを持つと言われています。 [45] [46] 他のモデルとしては 、3つのデータ型すべてが64ビット幅の ILP64データモデル、 [47] [46] や、 短 整数も64ビット幅の SILP64 モデルなどがあります。 [48] [49] しかし、ほとんどの場合、必要な変更は比較的小さくて簡単なので、よく書かれたプログラムの多くは、変更を加えることなく新しい環境用に再コンパイルするだけで済みます。もう1つの選択肢は LLP64 モデルで、とを両方とも32ビット のままにすることで、32ビットコードとの互換性を維持しています 。 [50] [46] 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で使用されている。 [51] [52]
現在、多くの64ビットプラットフォーム (Solaris、 AIX 、 HP-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 するようにデバイスに要求した場合、そのアドレスのポインタがデバイスの DMA レジスタに適合しないため、4 GB 境界を超えるメモリにデバイスからデータをロードするというオペレーティング システムからの要求を満たすことができません。この問題は、DMA のドライバへの要求を生成するときに OS がデバイスのメモリ制限を考慮に入れるようにするか、 入出力メモリ管理ユニット (IOMMU) を使用することによって解決されます。
現在の64ビットアーキテクチャ
2023 年 8 月現在 [update] 、プロセッサが製造されている 64 ビット アーキテクチャは次のとおりです。
同じ32ビットアーキテクチャから派生した64ビットアーキテクチャのほとんどは、32ビット版用に記述されたコードをネイティブに実行でき、パフォーマンスの低下はありません。例えば、AMD64やIntel 64を搭載したプロセッサは、32ビットアプリケーションをフルスピードで実行できます。 [53]このようなサポートは、一般的に バイアーキテクチャサポート 、またはより一般的には マルチアーキテクチャサポート と呼ばれます 。
参照
注記
参考文献
^ Pentiumプロセッサ ユーザーズマニュアル 第1巻:Pentiumプロセッサ データブック (PDF) . Intel . 1993年。
^ 「Cray-1コンピュータシステムハードウェアリファレンスマニュアル」 (PDF) . Cray Research . 1977 . 2013年 10月8日 閲覧 。
^ グライムス、ジャック、コーン、ラジーブ・バラドワジ(1989年7~8月)。 「Intel i860 64ビットプロセッサ:3Dグラフィックス機能を備えた汎用CPU」 IEEE Computer Graphics and Applications 9 ( 4): 85– 94. doi :10.1109/38.31467. S2CID 38831149. 2010年11月19日 閲覧 。
^ 「i860 プロセッサ ファミリ プログラマーズ リファレンス マニュアル」 (PDF) . Intel . 1991 . 2019年 9月12日 閲覧 。
^ 「NEC、高コストパフォーマンスの64ビットRISCマイクロプロセッサ2機種を発表」(プレスリリース)。NEC 。1998年1月20日。 2011年1月9日 閲覧 。VR4300 プロセッサ の各バージョンは、人気のNintendo 64™ビデオゲームや、最近発表され数々の賞を受賞したHewlett-Packard LaserJet 4000プリンタファミリなどの高度なレーザープリンタを含む、コンシューマおよびオフィスオートメーションアプリケーションで広く使用されています。
^ MIPS R5000マイクロプロセッサの技術的背景 (PDF) 、MIPS Technologies, Inc 、 2024年8月19日 取得
^ 「DDR5 | DRAM」。Samsung Semiconductor Global . 2025年1月19日 閲覧。
^ “i860 64ビットマイクロプロセッサ”. Intel. 1989年. 2011年3月19日時点のオリジナルよりアーカイブ。 2010年 11月30日 閲覧 。
^ “アタリ・ジャガーの歴史”. アタリアゲ 。
^ Joe Heinrich (1994). MIPS R4000 マイクロプロセッサ ユーザーズマニュアル (第2版). MIPS Technologies, Inc.
^ Richard L. Sites (1992). 「Alpha AXPアーキテクチャ」. Digital Technical Journal . 4 (4). Digital Equipment Corporation.
^ Gwennap, Linley (1994年10月3日). 「UltraSparcがSPARCのパフォーマンスを解き放つ」. マイクロプロセッサレポート . 8 (13). MicroDesign Resources.
^ 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.
^ Gwennap, Linley (1994年11月14日). 「PA-8000は複雑さとスピードを兼ね備えている」. マイクロプロセッサレポート . 8 (15). MicroDesign Resources.
^ 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.
^ 「VIA、次世代Isaiahプロセッサコアの詳細を発表」(プレスリリース)VIA Technologies, Inc. 2007年10月11日時点のオリジナルよりアーカイブ。 2007年7月18日 閲覧 。
^ 「ARMv8 テクノロジープレビュー」 (PDF) 2011年10月31日. 2011年11月11日時点の オリジナル (PDF)からアーカイブ。 2012年 11月15日 閲覧 。
^ 「ARM、世界で最もエネルギー効率の高い64ビットプロセッサ、Cortex-A50シリーズを発表」(プレスリリース)。ARM ホールディングス。 2012年10月31日 閲覧 。
^ 「ARM基調講演:ARM Cortex-A53およびARM Cortex-A57 64ビットARMv8プロセッサ発表」 ARMdevices.net . 2012年10月31日。
^ Asanović, Krste ; Patterson, David A. (2014年8月6日). 命令セットは無料であるべき:RISC-Vの事例 (PDF) . カリフォルニア大学バークレー校 EECS 学科. UCB/EECS-2014-146.
^ 「Synopsys、新しい64ビットARCプロセッサIPを発表」。2022年3月31日時点のオリジナルよりアーカイブ。
^ Stefan Berka. 「Unicos オペレーティングシステム」. www.operating-system.org. 2010年11月26日時点のオリジナルよりアーカイブ。 2010年11月19日 閲覧 。
^ Jon "maddog" Hall (2000年6月1日). 「私の人生とフリーソフトウェア」. Linux Journal .
^ Andi Kleen. Linuxのx86-64への移植 (PDF) . Ottawa Linux Symposium 2001. 現状: カーネル、コンパイラ、ツールチェーンは動作しています。カーネルは起動し、シミュレータ上で動作し、ユーザーランドと実行プログラムの移植に使用されています。
^ ab 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日 閲覧 。
^ Joris Evers (2005年1月5日). 「Microsoft、Itanium版Windows XPを廃止」Computerworld. 2013年6月18日時点のオリジナルよりアーカイブ。 2017年 10月17日 閲覧 。
^ 「Microsoft、Windows Server 2003およびWindows XP Professionalの64ビット版の提供開始により速度制限を引き上げる」(プレスリリース)。Microsoft。2005年4月25日。 2015年 9月10日 閲覧 。
^ 「Dell BizClient プラットフォーム上の UEFI」 (PDF) 。
^ 「AMD64プログラマーズ・マニュアル 第2巻:システムプログラミング」 (PDF) 。Advanced Micro Devices。2024年3月。127ページ。
^ 「Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル 第 3A 巻: システム プログラミング ガイド、パート 1」 (PDF) 。Intel。2016 年 9 月。p. 4-2。
^ 「Power ISA バージョン3.0」。IBM 。 2015年11月30日。983ページ。
^ 「Oracle SPARC Architecture 2015 Draft D1.0.9」 (PDF) . Oracle . 2016年11月16日. p. 475. 2020年4月22日時点の オリジナル (PDF)からのアーカイブ。
^ 「Aプロファイルアーキテクチャ向けARMアーキテクチャリファレンスマニュアル」。2024年11月30日。セクションD8.1.6「実装された物理アドレスサイズ」、セクションD8.1.8「サポートされている仮想アドレス範囲」。
^ Mashey, John (2006年10月). 「64ビットへの長い道のり」. ACM Queue . 4 (8): 85– 94. doi : 10.1145/1165754.1165766 .
^ 「Windows 7: 64ビット vs 32ビット?」 W7フォーラム。2009年4月2日。2009年4月5日時点のオリジナルよりアーカイブ。 2009 年4月5日閲覧 。
^ 「Java HotSpot VMに関するよくある質問」。Oracle 。 2024年12月13日 閲覧 。
^ 「32ビット版Windows Vistaと64ビット版Windows Vistaの違いについての説明」。2011年10月15日時点のオリジナルよりアーカイブ。 2011年10月14日 閲覧 。
^ Mark Russinovich (2008年7月21日). 「Windowsの限界に挑戦:物理メモリ」. 2017年4月7日時点のオリジナルよりアーカイブ 。 2017年3月9日 閲覧。
^ Chappell, Geoff (2009年1月27日). 「32ビットWindows Vistaのライセンスメモリ」 geoffchappell.com . WP:SPS . 2017年 3月9日 閲覧 。
^ 「ネイティブアプリケーションの内部」Technet.microsoft.com、2006年11月1日。2010年10月23日時点のオリジナルよりアーカイブ 。 2010年11月19日 閲覧。
^ リンカーン・スペクター (2013年8月12日). 「新しいPCで古いプログラムを実行する」
^ Peter Seebach (2006). 「POWER5での64ビット開発の探究:コードの移植性は実際どの程度か?」 IBM .
^ ヘンリー・スペンサー、「Cプログラマのための十戒」
^ 「The Story of Thud and Blunder」. Datacenterworks.com . 2010年11月19日 閲覧。
^ 「ILP32 および LP64 データ モデルとデータ型のサイズ」 。z/OS XL C/C++ プログラミング ガイド 。
^ abc 「64ビットプログラミングモデル」 。 2020年6月5日 閲覧 。
^ 「ILP64インターフェースとLP64インターフェースの使用」 Intel . 2020年 6月24日 閲覧 。
^ ab "Cray C/C++ リファレンスマニュアル". 1998年8月. 表9-1. Cray Researchシステムのデータ型マッピング. 2013年10月16日時点のオリジナルよりアーカイブ 。 2013年 10月15日 閲覧。
^ ab 「Cray CおよびC++リファレンスマニュアル(8.7)S-2179」 。 2020年 6月24日 閲覧 。
^ 「抽象データモデル - Windowsアプリケーション」。2018年5月30日。
^ “ILP32 for AArch64 Whitepaper”. ARM Limited. 2015年6月9日. 2018年12月30日時点のオリジナルよりアーカイブ 。 2018年 10月9日 閲覧。
^ 「2018年のAppleデバイス」。woachk、セキュリティ研究者。2018年10月6日。
^ stevewhims. 「ゲーム開発者のための64ビットプログラミング - Win32アプリ」. learn.microsoft.com . 2025年10月22日 閲覧 。
外部リンク
64 ビット移行ガイド、Mac 開発者ライブラリ
Karpov, Andrey. 「実プログラムにおける64ビットエラーの例集」。2021年9月23日時点のオリジナルよりアーカイブ。
Kilgard, Mark J. 「Xコードは64ビットに対応していますか?」 2001年6月3日時点のオリジナルよりアーカイブ。 2012年 9月26日 閲覧 。
Wayback Machine の 64 ビット C/C++ アプリケーション開発のレッスン (2021 年 4 月 14 日アーカイブ)
64 ビット プログラミング モデル: LP64 を選ぶ理由
AMD64 (EM64T) アーキテクチャ