Я хочу обменять два целых числа, и я хочу знать, какая из этих двух реализаций будет быстрее: Очевидный способ с переменной 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;
}
Похоже, что первый использует дополнительный регистр, но второй выполняет три загрузки и сохраняет, в то время как первый выполняет только два из них. Может ли кто-нибудь сказать мне, что быстрее и почему? Почему важнее.