21

少し質問があります:

  1. 64ビットデータ型(__int64またはint64_t)を使用するには、64ビットプロセッサが必要ですか?

  2. int64_tの「t」とはどういう意味ですか?

  3. どのバージョンのGCCとVCCがデータ型をサポートしているのですか?

  4. 64ビットデータ型はデータ長を2倍にしているだけですか、それとも他にも何かが起こっているのでしょうか。

4

4 に答える 4

21

64ビットデータ型を使用するために64ビットプロセッサは必要ありません。それはすべてコンパイラに依存し、コンパイラにのみ依存します。コンパイラは、必要に応じて、128ビット、237ビット、または803ビットのデータ型を提供できます。

ただし、通常、32ビットCPUは64ビット値を直接処理できないことに注意してください。つまり、64ビットタイプに必要なすべての言語操作をサポートする負担は、コンパイラとライブラリにあります。コンパイラは、64ビット値に対して加算、シフト、乗算などを実行するために、多かれ少なかれ複雑な32ビットCPU命令のシーケンスを生成する必要があります。つまり、32ビットCPU用に生成されたコードでは、64ビットデータタイプでの基本的な言語操作は、64ビットCPU用に生成されたコードよりも効率的ではありません(後者では、ほとんどの言語操作が単一のCPU命令)。

の「t」はint64_t「type」または「typedefname」を表します。これは、標準ライブラリのtypedefで古くから受け入れられている命名規則です。

コンパイラのバージョンに関しては、実際にはあいまいな質問です。typedef名int64_tはC言語の標準ライブラリ(C ++言語ではない)の一部ですが、64ビット整数型(任意の名前)のサポートはコンパイラの一部です。それで、あなたはどちらについて尋ねていますか?たとえば、MSVCコンパイラは64ビットデータ型を長い間サポートしてきましたが、これらの型の名前は異なります。64ビットの符号付き整数は__int64、MSVCではそのようなものと呼ばれます。int64_ttypedef、AFAIKに関しては、今日でもMSVCの標準ライブラリの一部ではありません。実際、int64_tその仕様のC99バージョンからC言語の一部になりました。同時に、それはC++言語の一部ではありません。したがって、一般的に、あなたは持っていることを期待することは想定されていませんint64_tコンパイラのバージョンに関係なく、C++コードで。

データ長に関しては...ええ、それはビット数を2倍にしているだけです。残りは続きます。

于 2011-04-03T18:04:43.417 に答える
8
  1. いいえ、32ビットマシンでそのようなデータを処理できます。コンパイラがこれらのデータ型をサポートしている限り、問題はありません。
  2. int64_tは、標準で定義されている名前です。
  3. 今世紀のGCCとMSVCのすべてのバージョンは、32ビットアーキテクチャで64ビット整数をサポートしていると思います。
  4. 64ビット整数は、32ビット整数のちょうど2倍のサイズです。
于 2011-04-03T16:39:05.290 に答える
3

を見ると、次のように定義され/usr/include/stdint.hていることがわかります。int64_t

typedef long long int int64_t;

したがって、Davidが言ったように、これはコンパイラであり、アーキテクチャに依存しません。

于 2011-04-03T16:44:16.187 に答える
0

いいえ、32ビットアーキテクチャのコンパイラは64ビット演算をエミュレートします。それほど速くはありませんが、それほど悪くはありません。

tを参照しますtype。これは、構造体を別の方法で参照する必要があるCからのレガシーです。

64ビット整数型ではアライメントが向上する可能性がありますが、それだけです。

ポイント3はわかりません。

于 2011-04-03T16:55:10.327 に答える