2009-05-25 10 views
7

int型以上ですか?C#でバイト/ショートなどを使用する理由は何ですか?

多くのコードでは、intをdouble/floatで使用しています。

.NETモバイル版のようなものがあることは知っていますが、バイト/ショートは独自のものになりますが、デスクトップアプリケーションの場合は何か問題はありますか?

私はC++の仕事(ゲームプログラミング)をしたとき、私はC#/ Javaの仕事でこの気持ちを持っていませんが、私が使っていた各データ型をよく知っていました。

私のループがバイトの境界を決して通過しないことを知っているなら、バイトを使用して私の利点がありますか?

+0

一般的な答えは、intを使用しますが、大量のデータ(配列など)の場合は、少なくとも小さなデータ型を考慮する必要があります。 – Finglas

答えて

10

byteと比較するとと大きな違いはありませんが、大きな配列を持つと、これらの余分な7バイトが大きな違いになります。 sの範囲がbyteのことである:より多くの何

は、データ型があなたはlengthことを確実に知るbyte length;が発生したときより良い意思」の開発者を伝える手助けということです。

+1

minor: 'byte'と' long'は7つの余分なバイトであり、3つの余分なバイトではありません。 –

+0

おっと、私の悪い。さらに、7バイトは巨大です! –

3

これは「ジョブに適切なツールを使用する」場合です。バイトを表す何かを使用している場合は、byteデータ型を使用します。バイトストリームを含む多くのコードでは、バイト配列を使用する必要があります。逆に、任意の整数で作業している場合は、intより大きい場合はintまたはlongを使用します。

3

たくさんbyteを使用する理由のを - 生のバイナリストリーム(画像、ファイル、シリアル化コードなど)を扱うものはbyte[]バッファの面で話をしているつもりです。

私はbyteをカウンタとして使用しませんが、CPUはより効率的にintを処理できます。 short

あなたがそれらの配列を持っている場合...よくそれはスペースのかなりを保存するかもしれませんが、一般的に、私はちょうどintを使用すると思います。

4

CPUのネイティブワードサイズよりも小さいデータ型を使用すると、パフォーマンスが低下します。 CPUが2バイトを加算する必要がある場合は、32ビットワードサイズのレジスタにロードし、加算し、調整します(最上位3バイトを切り捨て、キャリー/オーバフローを計算します)。

これは多くの作業です。ループ内の変数を使用する場合は、CPUのネイティブワードより小さくしないでください。

これらのデータ型は、サイズ制約のため、または従来のAPIのためにコードを含む構造体を処理できるように存在します。

8

私がこの質問をしていると思うことは、10年以上前、あなたの変数が保存する必要があった値を考え、たとえば、パーセント(0..100)それはジョブにとって十分に大きかったのでバイト(-128〜127の符号付きまたは0〜255の符号なし)を使用する可能性があり、「無駄」が少ないと見なされます。

最近のような対策は不要です。メモリは、それほどプレミアムではありません。とにかく、32ビットワード境界(64でない場合もあります)で整列させる現代のコンピュータによっては、おそらく敗北するでしょう。

何千もの配列を格納していない限り、これらの種類のマイクロ最適化は、今では無関係です。

最後に、私が生データ以外の何かのためにバイトを使用しなかったのは覚えていません。私が最後に短く使ったことは考えられません。

関連する問題