6

C ++では、long over intを使用することに何か利点はありますか?

longはx86およびx86_64アーキテクチャのデフォルトのワードサイズ(x86では32ビットおよびx86_64では64ビット、intは両方で32ビット)のようです。これは(理論的には)演算を行うときに高速になるはずです。

C ++標準では、sizeof(int)<= sizeof(long)が保証されていますが、32ビットシステムと64ビットシステムの両方でlongがデフォルトのサイズであるように思われるため、書き込みを試みる場合は、可能であればintの代わりにlongを使用する必要があります。両方のアーキテクチャで移植可能なコード?

4

3 に答える 3

5

long少なくとも32ビットであることintが保証されていますが、少なくとも16ビットであることが保証されています。完全にポータブルなプログラムを作成するlong場合、保証されたサイズがintニーズに対して十分でない場合に使用できます。

ただし、実際には、多くの人は、そのintようなプラットフォームのみを対象としているため、標準の保証よりも大きい暗黙の仮定を立てます。これらの状況では、通常はそれほど重要ではありません。

intシステムの数値の「自然な」サイズである必要があります。理論的longにはより高価かもしれませんが、多くのアーキテクチャでは、実際にがより長い場合longでも、での操作はより高価ではありません。longint

于 2012-07-27T06:42:46.733 に答える
4

異なるプラットフォーム間で同じサイズのままである整数型が必要な場合は、の型が必要です<stdint.h>

たとえば、32ビットの符号なし整数がどうしても必要な場合は、が必要ですuint32_t。64ビットの符号付き整数がどうしても必要な場合は、が必要ですint64_t

于 2012-07-27T06:43:18.457 に答える
1

より速いものとそうでないものは、毎日予測するのが難しくなっているものです。その理由は、プロセッサがもはや「単純」ではなく、その背後にあるすべての複雑なダイナミクスとアルゴリズムにより、最終的な速度が完全に直感に反するルールに従う可能性があるためです。

唯一の解決策は、測定して決定することです。また、何が高速であるかは細部に依存し、互換性のあるCPUの場合でも、一方の最適化が他方のペシミゼーションになる可能性があることに注意してください。非常に重要な部分の場合、一部のソフトウェアは、プログラムの初期化中に実行時にさまざまなアプローチのタイミングを試行してチェックします。

とは言うものの、原則として、あなたが持つことができるより速い整数はですint。他の整数は、特に必要な場合にのみ使用する必要があります(たとえば、longより大きくてより高い精度が必要な場合、またはshortより小さくても十分でメモリを節約する必要がある場合)。

特定のサイズが必要な場合は、固定の標準タイプを使用するか、必要な場所typedefに散らばるだけでなく、を追加するlongことをお勧めします。このようにすると、さまざまなコンパイラやアーキテクチャをサポートするのが簡単になり、将来コードを読む人にとっても意図が明確になります。

于 2012-07-27T06:49:36.733 に答える