少し質問があります:
64ビットデータ型(__int64またはint64_t)を使用するには、64ビットプロセッサが必要ですか?
int64_tの「t」とはどういう意味ですか?
どのバージョンのGCCとVCCがデータ型をサポートしているのですか?
64ビットデータ型はデータ長を2倍にしているだけですか、それとも他にも何かが起こっているのでしょうか。
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_t
typedef、AFAIKに関しては、今日でもMSVCの標準ライブラリの一部ではありません。実際、int64_t
その仕様のC99バージョンからC言語の一部になりました。同時に、それはC++言語の一部ではありません。したがって、一般的に、あなたは持っていることを期待することは想定されていませんint64_t
コンパイラのバージョンに関係なく、C++コードで。
データ長に関しては...ええ、それはビット数を2倍にしているだけです。残りは続きます。
を見ると、次のように定義され/usr/include/stdint.h
ていることがわかります。int64_t
typedef long long int int64_t;
したがって、Davidが言ったように、これはコンパイラであり、アーキテクチャに依存しません。
いいえ、32ビットアーキテクチャのコンパイラは64ビット演算をエミュレートします。それほど速くはありませんが、それほど悪くはありません。
t
を参照しますtype
。これは、構造体を別の方法で参照する必要があるCからのレガシーです。
64ビット整数型ではアライメントが向上する可能性がありますが、それだけです。
ポイント3はわかりません。