Técnicas de Optimización | Juego 2 (intercambio)

¿Cómo intercambiar dos variables?

La pregunta puede parecer tonta, ni geek. Consulte el siguiente fragmento de código para intercambiar dos enteros ( intercambio XOR ),

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

A primera vista, podemos pensar que no hay nada malo con el código. Sin embargo, cuando se le preguntó por la razón detrás de optar por la lógica de intercambio XOR, la persona no tenía ni idea. Quizás cualquier operación conmutativa pueda satisfacer la necesidad con algunos casos de esquina.

Evite el uso de fragmentos de código sofisticados en el software de producción. Crean sorpresas en tiempo de ejecución. Podemos observar las siguientes notas en el código anterior

  1. El comportamiento del código no está definido. La instrucción que modifica una variable más de una vez sin ningún punto de secuencia .
  2. Crea paradas de canalización cuando se ejecuta en un procesador con arquitectura de canalización.
  3. El compilador no puede aprovechar la optimización de la operación de intercambio. Algunos procesadores proporcionarán una sola instrucción para intercambiar dos variables. Cuando optamos por funciones de biblioteca estándar, hay más posibilidades de que la biblioteca se haya optimizado. Incluso el compilador puede reconocer dicha función estándar y genera un código óptimo.
  4. La legibilidad del código es pobre. Es muy importante escribir código mantenible.

Gracias a Venki por escribir el artículo anterior. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *