В ходе обсуждения с одним из коллег-начальников, попробовал вставить swap в какой-нибудь контест.
C source
int get_gcd( int a, int b )
{
while (1)
{
if (b == 0)
return a;
a %= b;
a ^= b ^= a ^= b;
}
}
int get_gcd_2( int a, int b )
{
while (1)
{
if (b == 0)
return a;
a %= b;
{
int c = a;
a = b;
b = c;
}
}
}
RVCT code | GCC code |
---|---|
get_gcd PROC | get_gcd: |
C source
void swap_memory( int* array, int len )
{
int i;
for (i = 0; i < (len / 1); i++)
{
array[i] ^= array[len - i - 1] ^= array[i] ^= array[len - i - 1];
}
}
void swap_memory_2( int* array, int len )
{
int i;
for (i = 0; i < (len / 1); i++)
{
int c = array[i];
array[i] = array[len - i - 1];
array[len - i - 1] = c;
}
}
RVCT code | GCC code |
---|---|
swap_memory PROC | swap_memory: |
В общем, для себя я сделал вывод - лучше не выпендриваться, использовать дополнительную переменную и не мешать компилятору самому оптимизировать данный кусок кода.
3 комментария: