なぜリングバッファサイズは2の累乗でなければならないのですか?リングバッファサイズを2の累乗にする必要があるのはなぜですか?
6
A
答えて
22
下記の方法を使用するには、2の累乗でなければなりません。それは別のものである必要はありません。
一般的なアプローチは、「if(index> = size){index = size-index;}」(サイズ10、インデックス10、結果インデックスが0)のように見えます。これは、次のアプローチと比較して遅くなり、エラーになりやすい。 - 31として
size = 32
bin(size) => '00100000'
mask = size - 1;
bin(mask) => '00011111'
ビット単位でこのマスクを適用すると、我々は0の範囲内の数字を構成するビットのみを分離することができます:2の電源を使用して
は私たちは、次の利点を取ることができますインデックスが育つ:
index = 4
bin(4 & mask) => '00000100' (4)
# index 32 wraps. note here that we do no bounds checking,
# no manipulation of the index is necessary. we can simply
# and safely use the result.
index = 32
bin(index & mask) => '00000000' (0)
index = 33
bin(index & mask) => '00000001' (1)
index = 64
bin(index & mask) => '00000000' (0)
index = 65
bin(index & mask) => '00000001' (1)
このアプローチは、何の枝を何の比較を必要とせず、(常に範囲内のインデックスをもたらす)安全です。情報を捨てないという利点があります。インデックス65は要素1を扱いますが、私はまだインデックスが論理的に65であるという情報を保持しています(これは非常に便利です)。
私も、私は、これはそれが3
だとき、私はパーティーに遅刻知っているようにインデックスが3456237(バッファ内のアドレス13)に成長したときに同じように効率的であることを追加したいですどのように私はこの質問を発見したかわからない:-)これは助けて欲しい。
関連する問題
- 1. ページテーブルエントリサイズ - なぜ2の累乗ですか?
- 2. バイト数が2の累乗で表されるのはなぜですか?
- 3. なぜHashMapは初期容量が2の累乗であることを要求しますか?
- 4. 2の累乗でループをインクリメントする
- 5. Python:0から16の累乗で2の累乗
- 6. 2の累乗数を確認する
- 7. イメージは2の累乗ではありませんか?
- 8. sqrt、cbrt - 2乗根または3乗根は必要ありませんが、ルートは必要ですか?
- 9. JavaScriptでの最速の累乗累乗
- 10. numpyに、0の累乗から0の累乗で累乗したベクトルの各行の行列を返す関数がありますか?
- 11. なぜデータソース/デリゲートを2回宣言する必要があるのですか?
- 12. AjaxUpload:なぜ2回クリックする必要がありますか?
- 13. マージソートは2の累乗であるサイズを持つベクトルを返します。
- 14. なぜ[basic.scope.class]/2が必要ですか?
- 15. メモリページサイズが2の累乗であると想定するのは安全ですか?
- 16. なぜInSampleSizeは2の累乗でなければならないのですか?
- 17. テクスチャは2の特定の累乗ですか?
- 18. 2番目のcin.ignore()が必要なのはなぜですか?
- 19. NumericUpDownコントロールで2の累乗しか受け付けないようにする
- 20. 2の累乗で最後の要素のバイナリ検索
- 21. フォームに投稿するためにモーダルボタンを2回クリックする必要があるのはなぜですか?
- 22. GMP整数を2の累乗(2n)の和に変換する
- 23. setTimeoutに関数をラップする必要があるのはなぜですか?
- 24. ClassInitializeメソッドを静的にする必要があるのはなぜですか?
- 25. java @SafeVarargsプライベートメソッドをfinalにする必要があるのはなぜですか?
- 26. SharedModuleをルートモジュールにインポートする必要があるのはなぜですか?
- 27. コピーコンストラクタをconstにする必要があるのはなぜですか?
- 28. Lispの中に# 'を入れる必要があるのはなぜですか?
- 29. なぜmochaはdevDependenciesになる必要がありますか?
- 30. Yii2。効果を得るためにファイルを2回アップロードする必要があるのはなぜですか?
何が2の威力でなければならないと思いますか? –