SORU
4 Ocak 2014, CUMARTESİ


Neden SEO bu işlev öldürür mü?

Biz son zamanlarda birçok dilde programlama özel hakkında Üniversitede bir ders vardı. Aşağıdaki işlevi yazdı:

inline u64 Swap_64(u64 x)
{
    u64 tmp;
    (*(u32*)&tmp)       = Swap_32(*(((u32*)&x) 1));
    (*(((u32*)&tmp) 1)) = Swap_32(*(u32*) &x);

    return tmp;
}

Ben tamamen bu da okunabilirlik açısından çok kötü bir tarzı olduğunu anlamak olsa da, asıl mesele bu kod parçası optimizasyonu yüksek bir düzeyde etkin kadar iyi üretim kodu olarak çalıştı. Sonra kodu sadece bir şey yapmaz.

tmp derleyici tarafından optimize edilmiş olacaktı değişkeni için tüm atamaları söyledi. Ama niçin böyle olacağını?

Değişkenleri ilan edilmesi için gereken şartlar olduğunu anlıyorumuçucuderleyici eğer hiç okuma veya yazılı olduğunu düşünüyorsa bile onlara dokunmaz ama bu burada olacağını neden bilmiyorum.

CEVAP
4 Ocak 2014, CUMARTESİ


Argümanlar eğer işaret varsa diğer (char* dışında) kabul edilir işaretçi C , temelde farklı türleri ("strict aliasing" kuralları). Bu bazı iyileştirmeler sağlar.

Burada, u64 tmp u64 olarak değiştirilmiş.
u32* içerik değiştirildiğinde, ama ilgisiz 'u64 tmp' u64 tmp nop olarak görülebilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Matthew Smith

    Matthew Smit

    24 Mayıs 2010
  • Rhapsody

    Rhapsody

    7 ŞUBAT 2008
  • Tomas N

    Tomas N

    14 Kasım 2010