2016-03-22 15 views
1

64Bitサーバーを使用しています。私のgolangプログラムには整数型が必要です。Golangでは、uint16 VS intはコストがかかりませんか?

だから、uint16とuint32型をソースコードで使用すると、最も一般的なint型を使用する以上のコストがかかりますか?

私は計算コストと開発コストの両方を考えています。

+5

「コスト」とはどういう意味ですか?あなたが何十億ものものを保管していて、何十億という操作をしていない限り、違いに気付くことさえ疑うでしょう。遭遇する可能性のある値をカバーする表現を使用してください。 – tadman

+0

ソースコードの変数型を変換するための開発者ライティングラインも含まれます。 –

+2

あなたが間違ったタイプを選んだときは、いつも変換しています。 – tadman

答えて

8

大部分のケースでは、intを使用する方が意味があります。 は、ここではいくつかの理由です:

  1. Goが暗黙のうちにあなたはそれが必要だと思う場合でも、数値型の間で変換しません。 intの代わりに符号なしの型を使用する場合は、の値を返すタイプのない定数式があるため、符号なしの型を気にしないライブラリやAPIがあるため、複数の型変換でコードを処理する必要があります。
  2. 0(符号なしタイプの境界値)は、コンピュータプログラムで自然に発生する値のほうが-9223372036854775808よりもはるかに多いため、符号なしタイプは符号付きタイプよりもアンダーフローしやすい傾向があります。
  3. 符号なしタイプを使用する場合は、その中に入れることができる値を制限するので、サイレントアンダーフローとコンパイル時のみの定数伝播を組み合わせると、おそらくあなたが得たバーゲン探している。たとえば、定数math.MinInt64uintに変換することはできませんが、値math.MinInt64int変数をuintに簡単に変換できます。そして、間違いなく、ifにあなたが割り当てようとしている値があなたのプログラムにとって有効かどうかをチェックすることは悪いGoスタイルではありません。

あなたが大量のメモリ圧力を経験しているし、あなたの値空間はどこか若干小さい符号付きの型はあなたを提供するであろうものの上にある場合を除き、私はintを使用しているため、開発コストのも、場合にのみ、はるかに効率的になると思うだろう。 それでも、プログラムのメモリフットプリントのどこかに問題があるか、Goのような管理された言語がニーズに合っていない可能性があります。

関連する問題