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

  • AceHoodVEVO

    AceHoodVEVO

    12 Mayıs 2009
  • Angry Paintballer

    Angry Paintb

    8 Ocak 2012
  • natescamp

    natescamp

    30 NİSAN 2009