SORU
30 Mart 2015, PAZARTESİ


Negatif değerler için kontrol etmek yerine number döküm aralığı testi yapmak için daha verimli mi?

Üzerine bu kod parçası buldum .NET List source code:

// Following trick can reduce the range check by one
if ((uint) index >= (uint)_size) {
  ThrowHelper.ThrowArgumentOutOfRangeException();
}

Görünüşe göre bu daha verimli olur (?) daha if (index < 0 || index >= _size)

Hile arkasındaki mantığı merak ediyorum. Tek bir şube talimat gerçekten uint iki dönüşüm daha pahalı? Yoksa bu kodu daha hızlı ek sayısal bir karşılaştırma daha yapacak başka bir optimizasyon mi oluyor?

Bu fil için: Evet, bu mikro optimizasyonu, bu her yerde benim kod kullanmak gibi bir niyetim yok, sadece merak ediyorum ;)

CEVAP
30 Mart 2015, PAZARTESİ


MS Partition I Bölüm 12.1 (Desteklenen veri türleri):

Tamsayı türleri (, ınt16, ınt32, ınt64 int8 ve native int) ve onların karşılık gelen imzasız imzalı tamsayı türleri (int8, imzasız ınt16, ınt32 imzasız, imzasız ınt64 ve yerel imzasız imzasız int) tamsayı bit nasıl yorumlandığını farklı. Bu işlemler için işaretsiz bir tamsayı farklı ayrı var imzalı bir tamsayı (örneğin, karşılaştırmalar ya da aritmetik taşma ile) kabul edilir işaretsiz bir tamsayı (örneğin, cgt.tedavi için talimatları BM ve ekleyin.sağlamakta.BM).

Yanidönüşümbir int uint sadece bir madde defter tutma - şu andan itibaren, değeri yığın/bir kayıt artık bilinen bir imzasız int yerine int.

İki dönüşüm "ücretsiz kod JİTted ve sonra işaretsiz karşılaştırma işlemi bir kez" yapılabilir. bu olmalı

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Droid Life

    Droid Life

    17 Kasım 2009
  • geraldnonadoez

    geraldnonado

    3 Temmuz 2013
  • Majestic Casual

    Majestic Cas

    28 NİSAN 2012