64ビットデータモデルとは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > 64ビットデータモデルの意味・解説 

64ビットデータモデル

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/14 02:30 UTC 版)

64ビット」の記事における「64ビットデータモデル」の解説

C言語およびC++では、char型を除く組み込み整数型short型、int型long型)は、最低限ビット数や大小関係しか規定していない。C99規格およびC++11規格では、int32_t や int64_t などビット数を規定した固定整数型およびにて定義される)を追加し、また64ビット上の値を表現できることが保証されるlong long型を追加したC言語等で書かれソフトウェア32ビットアーキテクチャから64ビットアーキテクチャ変換することの困難さは様々である。よく言われる問題は、プログラマがしばしば、ポインタintあるいはlongが同じ大きさだという前提コード書いていることである。つまり、ポインタintあるいはlongとの型変換で、情報失われないものと仮定している。これは32ビットから64ビットへの移行期始まった問題ではなく16ビットから32ビットへの移行期にも問題起こしてきた。しかし、32ビットミニコンに始まりワークステーション経て昨今高性能パソコンにおける32ビットOSまで、主要な環境長らくの間、どちらも同じ32ビットであるとしてかまわなかったため、多くコード32ビット環境前提書かれてきた。しかし、64ビット環境はしばしば、この仮定は真ではない。C/C++では、特にこの種の間違い犯しやすい。C89C99差異問題悪化させている。 C/C++での間違い防ぐには基本データ型サイズによって判断する必要があるときは、コンパイル時も実行時sizeofで常にサイズ確認するようにすればよい。また、C99C++ヘッダにあるnumeric_limitsクラスも役立つ。sizeofサイズchar個数でしか表さないが、limits.hには例えint型最大値INT_MAXなどが定義されている。なお、char型のサイズ標準ではCHAR_BITマクロで定義されることになっており、その値は実装依存とされている。しかし、DSPターゲットとするコンパイラ以外では、64ビットchar型8個であり、char型は8ビット、というのが普通である。 2つポインタの差を表す場合定義されてあるptrdiff_t型を使う必要があるint型long型を使うのは間違いである。ポインタ整数で表す場合はintptr_tまたはuintptr_tを使う(C99およびC++11標準化されたが、コンパイラによってはそれ以前標準準拠していても、独自拡張によってこの型を定義していることがある)。 多く32ビットマシンのプログラミング環境であるILP32データモデルでは、int型long型、ポインタ全て32ビット幅である。 しかし、64ビットマシンのプログラミング環境では、int型32ビットのままだが、long型とポインタ64ビット幅のLP64データモデルや、int型64ビット幅になるILP64データモデル採用している。しかし、修正必要がある箇所はほとんどの場合わずかであり、うまく書かれプログラムは単に再コンパイルするだけで済む。別のデータモデルとしてLLP64がある。これは、long long型とポインタだけが64ビットになっているもので、int型long型は32ビットのままであるlong long型はどんなプラットフォームでも(32ビット環境でも)常に64ビット幅以上である。 今日では、多く64ビットコンパイラがLP64モデル採用している(SolarisAIXmacOSz/OS のネイティブコンパイラなど)。マイクロソフトVisual C++コンパイラはLLP64モデルである。LP64モデル欠点は、long型の値をint型変数代入するときにオーバーフロー発生する可能性がある点である。一方ポインタlong型にキャストすることが可能である。LLP64モデルは、これとは逆になる標準に完全準拠したコードでは、どのデータモデルであっても影響はないが、実際に整数型の幅を暗黙のうちに仮定してコード書いていることが多い。なお、これらのモデルコンパイラ毎にどれを採用するかという問題であり、同一OS上でこれらが混在することは可能である。しかし、OSAPIがどのモデル選択するかで、そのOSでよく使われるデータモデルが決まる傾向がある。MinGW環境GCCはLLP64を採用するデバイスドライバがどのデータモデル採用するかも重要な問題である。ドライバデータ操作ポインタ頻繁に使い、DMAのためにハードウェアに対して特定幅のポインタロードする必要がある例えば、32ビットPCIデバイスドライバは、4GiBを超える位置にあるメモリとの間でDMAを行うことができないデバイスのDMAレジスタ32ビット幅であるため)。このためOSがそのドライバに対して要求を行う際にそのような制限考慮するか、IOMMUを使う必要がある16, 32, 64ビットデータモデルデータモデルshortintlonglong longポインタ処理系C++標準16以上 16以上 32以上 64以上 LLP6416 32 32 64 64 Microsoft Win64 (x64/IA-64) LP6416 32 64 64 64 ほとんどのUNIXとUnix系OS (Solaris, Linux, etc.) ILP6416 64 64 64 64 HAL Computer Systems port of Solaris to the SPARC64、等 SILP6464 64 64 64 64 ILP3216 32 32 64 32 一般的な32ビット環境 LP3216 16 32 64 32 I16LP3216 16 32 32 一般的な16ビット環境farポインタ) IP16L3216 16 32 16 一般的な16ビット環境nearポインタ

※この「64ビットデータモデル」の解説は、「64ビット」の解説の一部です。
「64ビットデータモデル」を含む「64ビット」の記事については、「64ビット」の概要を参照ください。

ウィキペディア小見出し辞書の「64ビットデータモデル」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「64ビットデータモデル」の関連用語

64ビットデータモデルのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



64ビットデータモデルのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaの64ビット (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS