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

  • RD

    RD

    19 NİSAN 2006
  • SomeOne Pro

    SomeOne Pro

    25 EKİM 2013
  • Theodore Leaf

    Theodore Lea

    29 AĞUSTOS 2006