64ビット
また、C99の<limits.h>やC++の<limits>ヘッダにあるnumeric_limitsクラスも役立つ。sizeofはサイズをcharの個数でしか表さないが、limits.hには例えばint型の最大値INT_MAXなどが定義されている。なお、char型のサイズは標準ではCHAR_BITマクロで定義されることになっており、その値は実装依存とされている。しかし、DSPをターゲットとするコンパイラ以外では、64ビットはchar型8個であり、char型は8ビット、というのが普通である。
2つのポインタの差を表す場合、<stddef.h>に定義されてある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ビットのままである。
64ビットアーキテクチャでの主な問題点は、32ビットアーキテクチャに比較して同じデータが占めるメモリ領域が大きくなる可能性がある点である(ポインタサイズの増大と、他のデータ型のサイズ増大、境界整列のためのパディングによる)。これによって、同じプログラムであっても必要とするメモリ量が増え、キャッシュ効率が低下する。部分的に32ビットモデルを採用することで対処することもでき、一般にそれなりに効果がある。実際、z/OSではこの方式を採用しており、実行コードは任意個の32ビットアドレス空間に置かれ、データは(オプションで)64ビット空間に配置することもできる。
2008年現在、多くの商用ソフトウェアは32ビットコードで構築されているため、64ビットアドレス空間や64ビット幅のレジスタの利点を生かしていない(x86の場合、64ビットモードで追加されたレジスタを使っていない)。しかし、フリーソフトウェアやオープンソースのOSは64ビット環境固有の部分を既に何年も前から利用してきた。ただし、あらゆるアプリケーションが64ビットのデータ型やアドレス空間を必要とするわけではなく、アドレス空間やレジスタが大きくなっても良いことがあるわけではない。ただし、x86 では使えるレジスタ数が増えるという固有の利点がある。
64ビット(英: 64-bit)は、連続した64個(桁)のビット(8オクテット)であり、バイナリで最大18,446,744,073,709,551,616(16エクスビ、約18.4E)までの数を表現できる。
「64ビットアーキテクチャ」とは、整数型、メモリアドレス、その他のデータサイズなどが、最大64ビット幅のアーキテクチャである。
「64ビットCPU」(プロセッサ、演算装置)とは、64ビットサイズのレジスタ、アドレスバス、データバスを持つCPU(プロセッサ、演算装置)である。
「64ビットオペレーティングシステム」とは、64ビットのCPUを前提に設計されたオペレーティングシステムである。
「64ビットアプリケーション」とは、64ビットのCPUおよび64ビットのオペレーティングシステムを前提に設計されたアプリケーションソフトウェアである。
「64ビットコンピュータ」とは、64ビットのプロセッサ (CPU) を標準的に搭載したコンピュータの世代である。