2012-01-12 5 views
2

Byteが列挙のデフォルトのバッキングタイプではないのはなぜですか?Byteが列挙のデフォルトのバッキングタイプではないのはなぜですか?

Int32は過剰なようです。これまで使用してきたすべてのEnumには20以下の値が含まれています。それはミクロ最適化ですが、一般的な使用法はすべて私の限られた経験では256個以下の値をとっているようです。

は、より技術的な理由がある、または単に確認することである列挙型の使用作業罰金の「すべての一般的な」シナリオとのInt32は本当にすべてのもの高価ではないですが、コーナーケース?私は、コンパイラはバッキングタイプ(または誰が、それは私が読んだ中で列挙を最適化することを言及している)は変化しない意味を得ているほか

。コンパイル時に値の範囲を知っているので、バッキングタイプを最適化しますか?

答えて

5

x86命令セットはint32演算をネイティブにサポートするためです。 int8オペランドを使用すると、パフォーマンスが向上しません。また、サブワードを最初にシャッフルしなければならない場合よりも速く実行される、自然にアライメントされたオペランド(32で割り切れるアドレスの32ビット)へのメモリアクセスもあります。

関連する問題