Я хочу обменять два целых числа, и я хочу знать, какая из этих двух реализаций будет быстрее: Очевидный способ с переменной temp:
void swap(int* a, int* b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
Или версия xor, которую я уверен, что большинство людей видели:
void swap(int* a, int* b)
{
    *a ^= *b;
    *b ^= *a;
    *a ^= *b;
}
Похоже, что первый использует дополнительный регистр, но второй выполняет три загрузки и сохраняет, в то время как первый выполняет только два из них. Может ли кто-нибудь сказать мне, что быстрее и почему? Почему важнее.