SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: ..::[JiOn]::.. en Martes 3 de Octubre de 2006, 19:15

Título: Buenas Y Consulta
Publicado por: ..::[JiOn]::.. en Martes 3 de Octubre de 2006, 19:15
Antes que nada, buenas, soy nuevo en el foro hace un tiempo que vengo leyendo y está muy bueno.

Bueno mi problema es que quiero copiar todo el contenido de un array a otro, sin tener que usar un bucle for como venia haciendolo:

Código: Text
  1.  
  2. int i, n;
  3.  
  4. for(i=0;i<10;i++)
  5. {
  6.      for(i=0;i<10;i++)
  7.      {
  8.            array1[i][n] = array2[i][n];
  9.       }
  10. }
  11.  
  12.  

una vez que copio el contenido de array2 a array1 tengo q modificar array2, asi que convertir array1 en un puntero a array2 no seria la solucion.
Título: Re: Buenas Y Consulta
Publicado por: AnioN en Martes 3 de Octubre de 2006, 19:32
me parece que ese codigo tiene un error, creo que seria asi:

Código: Text
  1.  
  2. int i, n;
  3.  
  4. for(i=0;i<10;i++)
  5. {
  6.     for(n=0;n<10;n++)
  7.     {
  8.           array1[i][n] = array2[i][n];
  9.      }
  10. }
  11.  
  12.  
Título: Re: Buenas Y Consulta
Publicado por: ..::[JiOn]::.. en Martes 3 de Octubre de 2006, 19:52
Si, perdon, es que no copie codigo y pegue, lo escribi en el post medio apurado. Igual a lo que voy no es a que no me anda ese codigo sino a que quisiera saber si no hay una manera mejor que esa para copiar arrays.
Título: Re: Buenas Y Consulta
Publicado por: JuanK en Martes 3 de Octubre de 2006, 20:45
Código: Text
  1.  
  2. memcpy(array1, array2);
  3.  
  4.  

http://www.conclase.net/c/librerias/funcion.php?fun=memcpy (http://www.conclase.net/c/librerias/funcion.php?fun=memcpy)
Título: Re: Buenas Y Consulta
Publicado por: ..::[JiOn]::.. en Miércoles 4 de Octubre de 2006, 04:24
Muchas gracias!! Estoy medio olvidado con el C ^_^
Título: Re: Buenas Y Consulta
Publicado por: geobeid en Viernes 6 de Octubre de 2006, 06:47
CLARO JUANK PERO SI NO ME EQUIVOCO INTERNAMENTE ESA FUNCION HACE EXACTAMENTE QUE ..::[JiOn]::.. VIENE HACIENDO. EN DEFINITIVA PARA COPIARLO HAY QUE RECORRERLO NO HAY OTRA FORMA :kicking:
Título: Re: Buenas Y Consulta
Publicado por: JuanK en Viernes 6 de Octubre de 2006, 14:46
No no hace lo mismo porque hasta donde se memcpy hace copia de bloques lo cual es mucho mas rápido que uno a uno como en el codigo que han mostrado, sin contar que hace le codigo mas legible y facil d mantener.

La manera en que memcpy hace la copia en general debe ser mucho mas eficiente que hacerla 'manualmente' pero eso tambien depende del compilador porque hay compiladores que las instrucciones de copia uno a uno las compilan generando codigo que copia porciones en bloque y algunos utilizan caracteristicas especiales de los procesadores para la generacion de codigo es decir instrucciones como las SSE4 o SSE3 o cualquiera de esas etc. que poseen por ejemplo los procesadores pentium algunos compiladores pueden ser capaces de generar codigo para usarlas, otros no.
Título: Re: Buenas Y Consulta
Publicado por: The Black Boy en Viernes 6 de Octubre de 2006, 17:02
yo no conocia esa instruccion, siempre lo hacia manual  :blink:    :whistling:

excelente, aunque yo creo lo mismo, creo que esa funcion por debajo lo copia rrecoriendo, aunque como dije antes ni siquiera conozco la funcion

Salu2 :hola:
Título: Re: Buenas Y Consulta
Publicado por: Eternal Idol en Viernes 6 de Octubre de 2006, 17:10
¿Recorriendo que? Esa funcion copia bytes ... y al menos en x86/x64 hay instrucciones (no funciones de C como memcpy) de ensamblador especificas para copiar bytes. Tampoco se usan extensiones para una tarea tan trivial.
Título: Re: Buenas Y Consulta
Publicado por: JuanK en Viernes 6 de Octubre de 2006, 17:22
claro, el ejemplo es trivial.. obviamente...
pero me inquieta saber si un compilador en un caso determinado puede optar por generar codigo usando extenciones o en otro puede decidir generar codigo solo mov?  :rolleyes:
Título: Re: Buenas Y Consulta
Publicado por: Eternal Idol en Viernes 6 de Octubre de 2006, 18:37
Cita de: "JuanK"
claro, el ejemplo es trivial.. obviamente...
pero me inquieta saber si un compilador en un caso determinado puede optar por generar codigo usando extenciones o en otro puede decidir generar codigo solo mov?  :rolleyes:
Esta funcion suele estar en la Run Time de C que por lo general esta precompilada en una biblioteca ya sea estatica (.lib) o dinamica (.dll para Windows). Las extensiones no suelen usarse a menos que explicitamente las habilites ya que como su nombre lo indican no estan presentes en todos los micros ...