4

正常に動作しているように見えますが、メモリに格納できるのは 32 ビット整数が最も多いと思いましたか?

今、私はそれがどのような違いをもたらすのか混乱しています。

ありがとう!

4

2 に答える 2

10

他の回答はこれを正しく説明していないと思います。

uint64_t と int64_t はC 言語のデータ型であり、ハードウェアのデータ型ではありません。コンパイラは、これらの型を 64 ビットの符号なしまたは符号付き整数として機能させるために必要なことは何でもします。ハードウェアが 64 ビット レジスタと整数演算を提供する場合、コンパイラはそれらを直接使用します。ハードウェアに 32 ビット (または 16 ビットまたは 8 ビット) のレジスタしかない場合、コンパイラとランタイム システムはソフトウェア エミュレーションを使用してジョブを実行します。

于 2013-02-28T17:05:59.337 に答える
6

違いは、使用可能な 64 ビット データ型があることではありません。違いは、使用可能なメモリ アドレス空間のサイズと、メモリへのポインタに必要なサイズです。32 ビット OS では、2^32 バイトのアドレス指定可能なメモリ空間があり、それをすべてカバーするには 32 ビット ポインタが必要です。64 ビット OS では、アドレス指定するメモリ空間が 2^64 バイトあるため、ポインタは 64 ビットである必要があります。

ハードウェア レベルでは、組み込みの 64 ビット データ型は、64 ビット レジスタとそれらを処理する命令があるため、64 ビット ハードウェアでより最適な場合があります。そうしないと、コンパイラ/ランタイム ライブラリは、32 ビット ハードウェアで 64 ビット操作をサポート/エミュレートするために、より多くの作業を行うことになります。

于 2013-02-28T16:40:54.717 に答える