Autor Tema: MEMCOPY y copiar tablas  (Leído 186 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Hola

  • Jr. Member
  • **
  • Mensajes: 93
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
MEMCOPY y copiar tablas
« en: Octubre 28, 2017, 09:49:42 am »
Hola de nuevo, quería plantear una duda respecto a este tema de copiar el contenido de una tabla a otra. Lo que quiero saber es, qué método seria mas rápido o eficiente a nivel interno en este caso, si tirarse escribiendo:



Tabla[0]=Tabla2[0]; y asi con todos los demas elementos.


Ó usar MEMCOPY?


Teniendo en cuenta que el tamaño de ambas tablas es el mismo y los valores son de un solo dìgito. De la primera forma obviamente ocuparia mas codigo y seria un poco sucio pero seria un método mas veloz que memcopy o es igual? Me explico?
« última modificación: Octubre 28, 2017, 09:54:40 am por Hola »

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12517
  • Karma: 369
  • Sexo: Masculino
    • Ver Perfil
Re:MEMCOPY y copiar tablas
« Respuesta #1 en: Octubre 28, 2017, 03:21:48 pm »
no hice la comparacion, pero me suena que memcopy seria mas lento.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Desconectado Hola

  • Jr. Member
  • **
  • Mensajes: 93
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Re:MEMCOPY y copiar tablas
« Respuesta #2 en: Octubre 28, 2017, 04:10:50 pm »
Gracias splinter.., mm, si, eso pensé..., digo, a simple vista cualquiera pensaría que la primera forma es más rápida ya que la otra es una función y todo ese tema, pero esperaba que tal vez podría obtener una respuesta mas exacta.., sobretodo viniendo de ti splinter que eres el diseñador de bennu. Yo no se cómo se hace la comparación..., leí por otros post tambien que poniendo tabla1=tabla2; funciona (segun el manual de bennu dice que no). Uhm.., no se si puedes agregarme algo mas o sino esta bien, me sirve igual.


Salu2..

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12517
  • Karma: 369
  • Sexo: Masculino
    • Ver Perfil
Re:MEMCOPY y copiar tablas
« Respuesta #3 en: Octubre 28, 2017, 04:55:30 pm »
cuidado, si intentas copiar la tabla entera, seguramente memcopy sea mas rapida, pero esto no sirve para tablas de strings, tablas de strings deben copiarse con tabla1=tabla2.

si copias un 1 item, sin dudas es mas rapida la asignacion, ya que ambos empujan elementos al stack y recuperan elementos, pero en el caso del memcpy empuja mas elementos y tiene incluso una llamada a funcion.

repito, siempre 1 cuando sea 1 elemento, y no una tabla entera o una serie de elementos de una tabla.

y otra cosa importantisima, no usar memcpy con strings.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12517
  • Karma: 369
  • Sexo: Masculino
    • Ver Perfil
Re:MEMCOPY y copiar tablas
« Respuesta #4 en: Octubre 28, 2017, 05:02:11 pm »
por si no quedo claro, para una tabla entera (que no sea, una tabla de 1 o 2 elementos, digamos 30, 100 o 1000) es mas rapido memcopy, con las restricciones dadas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Desconectado Hola

  • Jr. Member
  • **
  • Mensajes: 93
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Re:MEMCOPY y copiar tablas
« Respuesta #5 en: Octubre 28, 2017, 06:07:17 pm »
Gracias por contestar, una pregunta más, para ser exactos, la tabla que necesito copiar es tabla[8][8]; osea bidimensional, lo que me comentas se aplica de igual forma en este caso? 

Edit.., osea copiar el contenido de esa tabla bidimensional a otra tabla bidimensional de 8x8 también.
« última modificación: Octubre 28, 2017, 06:14:30 pm por Hola »

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12517
  • Karma: 369
  • Sexo: Masculino
    • Ver Perfil
Re:MEMCOPY y copiar tablas
« Respuesta #6 en: Octubre 28, 2017, 07:29:58 pm »
Código: [Seleccionar]
import "mod_say";
import "mod_mem";


global
    int tabla1[8][8];
    int tabla2[8][8];
end

private
    int i,ii;
    string row;
begin

    tabla1[0][0] = 1;
    tabla1[0][1] = 2;
    tabla1[0][2] = 3;
    tabla1[0][3] = 4;
    tabla1[1][4] = 8;
    tabla1[1][5] = 7;
    tabla1[1][6] = 6;
    tabla1[1][7] = 5;

    say("- tabla1 ----");

    for ( i = 0; i < 9; i++ )
        row = "";
        for ( ii = 0; ii < 9; ii++ )
            row += "[" + tabla1[i][ii] + "] ";
        end
        say( row );
    end

    say("- tabla2 (asignacion) ----");

    tabla2 = tabla1;

    for ( i = 0; i < 9; i++ )
        row = "";
        for ( ii = 0; ii < 9; ii++ )
            row += "[" + tabla2[i][ii] + "] ";
        end
        say( row );
    end

    say("- tabla2 (clear) ----");

    memset(&tabla2[0],0,sizeof(tabla2));

    for ( i = 0; i < 9; i++ )
        row = "";
        for ( ii = 0; ii < 9; ii++ )
            row += "[" + tabla2[i][ii] + "] ";
        end
        say( row );
    end

    say("- tabla2 (memcopy) ----");

    memcopy(&tabla2[0],&tabla1[0],sizeof(tabla1));

    for ( i = 0; i < 9; i++ )
        row = "";
        for ( ii = 0; ii < 9; ii++ )
            row += "[" + tabla2[i][ii] + "] ";
        end
        say( row );
    end

end

output:

Código: [Seleccionar]
$ bgdi tabla_copy     
- tabla1 ----
[1] [2] [3] [4] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [8] [7] [6] [5] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
- tabla2 (asignacion) ----
[1] [2] [3] [4] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [8] [7] [6] [5] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
- tabla2 (clear) ----
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
- tabla2 (memcopy) ----
[1] [2] [3] [4] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [8] [7] [6] [5] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
[0] [0] [0] [0] [0] [0] [0] [0] [0]
« última modificación: Octubre 28, 2017, 07:32:00 pm por SplinterGU »
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Desconectado Hola

  • Jr. Member
  • **
  • Mensajes: 93
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Re:MEMCOPY y copiar tablas
« Respuesta #7 en: Octubre 29, 2017, 06:14:09 am »
Hola, agradezco el ejemplo, pero yo preguntaba si se aplicaba lo mismo en el sentido de que, al ser la tabla bidimensional 8x8, copiar con memcopy resulta mas rápido que ir asignando cada elemento?

Desconectado Hola

  • Jr. Member
  • **
  • Mensajes: 93
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Re:MEMCOPY y copiar tablas
« Respuesta #8 en: Octubre 29, 2017, 06:55:50 am »
Vaya, acabo de probar tabla1=tabla2 así nomas y me copio la tabla, que joya, no sabia que funcionaba. Aun así me gustaría la respuesta de mi post anterior.

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12517
  • Karma: 369
  • Sexo: Masculino
    • Ver Perfil
Re:MEMCOPY y copiar tablas
« Respuesta #9 en: Octubre 30, 2017, 02:14:10 am »
si, varios elementos a la vez (las dimensiones que sean) es mas rapido que asignacion.

puedes probar el ejemplo que te pase, encerrando en loops de varios millones cada instruccion y tomar los tiempos. Y tendras una respuesta mas exacta de cual es mas rapido y por cuanto.
« última modificación: Octubre 30, 2017, 02:16:03 am por SplinterGU »
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Desconectado Hola

  • Jr. Member
  • **
  • Mensajes: 93
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Re:MEMCOPY y copiar tablas
« Respuesta #10 en: Octubre 30, 2017, 05:49:38 am »
Hola splinter, ya me quedo todo mas claro, gracias, lo único que no entendí es eso de 'loops de varios millones' si puedes explicarme que quisiste decir..

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12517
  • Karma: 369
  • Sexo: Masculino
    • Ver Perfil
Re:MEMCOPY y copiar tablas
« Respuesta #11 en: Octubre 30, 2017, 12:16:17 pm »
por ejemplo

Código: [Seleccionar]
for ( x = 0; x < 1000000; i++ )
...
end
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Desconectado Hola

  • Jr. Member
  • **
  • Mensajes: 93
  • Karma: 0
  • Sexo: Masculino
    • Ver Perfil
Re:MEMCOPY y copiar tablas
« Respuesta #12 en: Octubre 30, 2017, 02:09:09 pm »
Ah perfecto. Gracias por toda la ayuda.

Conectado SplinterGU

  • Hero Member
  • *****
  • Mensajes: 12517
  • Karma: 369
  • Sexo: Masculino
    • Ver Perfil
Re:MEMCOPY y copiar tablas
« Respuesta #13 en: Octubre 31, 2017, 09:11:05 am »
de nada, despues, si puedes y quieres, comparte el ejemplo, los resultados y las caracteristicas del equipo en el que probaste.

gracias a ti.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2