SORU
30 EKİM 2008, PERŞEMBE


Nasıl XOR, değişken iş değiştirmeyi mu?

Birisi XOR hayır temp değişkeni ile iki değişken değiştirme nasıl çalıştığını bana açıklayabilir mi?

void xorSwap (int *x, int *y)
{
    if (x != y) {
        *x ^= *y;
        *y ^= *x;
        *x ^= *y;
    }
}

Ben NE yaptığını anlamak, ama kimse nasıl çalıştığını mantığını bana anlatabilir miyim?

CEVAP
30 EKİM 2008, PERŞEMBE


Diğer insanlar bunu anlattık, şimdi bunun iyi bir fikir olduğunu açıklamak istiyorum, ama şimdi değil.

Tek veya çok çevrim-döngü CPU basit vardı geri gün, bu hile pahalı bellek çözümlemesi veya dökülmesini önlemek için kayıtları kullanmak daha ucuz yığını oldu. Ancak, biz şimdi büyük boru hatları ile bunun yerine CPU var. P4 boru hattı 31 20 olması arasında değişiyordu () okuma ve kayıt için yazı arasında herhangi bir bağımlılık her şeyi takılmasına neden olabilir nerede kendi boru hatlarında aşamaları. Xor swap ve aslında hiç önemli değil B arasında çok ağır bazı bağımlılıkları vardır ama pratikte boru hattı durak. Durmuş bir boru hattı yavaş bir kod yolu neden olur, ve eğer bu takas iç döngüde ise, çok yavaş hareket ediyor olacaksın.

Genel uygulamada, derleyici gerçekten geçici bir değişken ile bir takas yaparken ne yapmak istediğinizi anlayabilmiş ve tek bir XCHG talimat derleyin. Xor swap kullanarak derleyici niyetinizi tahmin etmek çok daha zor ve bu nedenle çok daha az optimize etmek için büyük olasılıkla doğru olmasını sağlar. Kod bakımı, vb bahsetmiyorum bile.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • gamingbits

    gamingbits

    2 Mayıs 2006
  • KarnasCamillo

    KarnasCamill

    24 EKİM 2007
  • SellerDp

    SellerDp

    27 EKİM 2009