[解決済み] なぜuint_fast32_tではなく、uint32_tが好まれるのですか?
疑問点
どうやら
uint32_t
よりもはるかに一般的です。
uint_fast32_t
(の方がはるかに多い(これは逸話的な証拠であることは承知しています)。私には直感に反しているように見えますが。
私が実装を見たとき、ほとんどいつも
uint32_t
を使用する実装を見ると、本当に欲しいのは 4,294,967,295 までの値を保持できる整数です (通常は 65,535 と 4,294,967,295 の間のかなり低い境界です)。
を使用するのは奇妙に思えます。
uint32_t
のように
'ちょうど 32 ビット'
の保証は不要であり
'最速で利用可能な >= 32 ビット'
の保証は不要です。
uint_fast32_t
は、まさに正しい考えであるように思えます。さらに
は通常実装されていますが
uint32_t
は実際に存在することが保証されていません。
では、なぜ
uint32_t
が好まれるのでしょうか?単によく知られているだけなのか、それとも他に技術的な利点があるのでしょうか?
どのように解決するのですか?
uint32_t
は、それをサポートするどのプラットフォームでも、ほぼ同じプロパティを持つことが保証されています。
1
uint_fast32_t
は、比較のために異なるシステムでどのように動作するかについて、ほとんど保証がありません。
が動作するプラットフォームに切り替えた場合
uint_fast32_t
が異なるサイズであるプラットホームに切り替えた場合、すべてのコードで
uint_fast32_t
を使用するすべてのコードを再テストし、検証する必要があります。 すべての安定性の前提が崩れることになります。 システム全体が異なる動作をすることになります。
コードを書くとき、あなたはもしかしたら
アクセス
にアクセスできないかもしれません。
uint_fast32_t
システムにアクセスすることができます。
uint32_t
は異なる動作をしません(脚注を参照)。
正しさはスピードよりも重要です。 したがって、早すぎる最適化よりも早すぎる正しさの方が良い計画です。
というシステムのためにコードを書いていた場合、私は
uint_fast32_t
が 64 ビット以上のシステム用にコードを書いている場合、両方のケースについて自分のコードをテストしてそれを使用することがあります。 必要性と機会の両方がない限り、そうすることは悪い計画です。
最後に
uint_fast32_t
よりも遅くなることがあります。
uint32
は、キャッシュ サイズとメモリ帯域幅の問題により、uint_fast32_t
は単独ではより高速ですが、メモリのオーバーヘッドを考慮するとそうではありません。
1
コメントで @chux さんが指摘しているように、もし
unsigned
よりも大きい場合
uint32_t
の演算は
uint32_t
は通常の整数演算を行い、そうでない場合は
uint32_t
. これはバグの原因になります。 完璧なものはないのです。
関連
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] template "と "typename "キーワードはどこに、なぜ入れなければならないのですか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] なぜリストの初期化(中括弧を使用)が他の方法より優れているのですか?
-
[解決済み】なぜenumクラスはプレーンなenumより好ましいのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C++ クラスヘッダが含まれているときに「不明な型」があるのはなぜですか?重複
-
[解決済み】LLVMで暗黙のうちに削除されたコピーコンストラクタの呼び出し
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】識別子 "string "は未定義?
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】変数 '' を抽象型 '' と宣言できない。
-
[解決済み】C++の変数はイニシャライザーを持っているが、不完全な型?
-
[解決済み] uint_fast32_tとは何ですか、なぜ通常のintやuint32_tの代わりに使うのですか?