Foro con Clase C/C++

Que es mas rápido los arrays o la aritmetica de punteros

Manu Exposito

Nº de hilos:6

Nº de mensajes:14

martes, 9 de marzo de 2021


Hola Salvador quisiera saber que es mas rápido y porqué en esta función usando array o punteros:

char *cstrtran( const char *cString, HB_SIZE nLenStr, const char *cFind, HB_SIZE nLenFind, const char *cReplace, HB_SIZE nLenRep )
{
HB_SIZE i, n, w = 0; // Contadores
    HB_BOOL fFind; // Encontrado?
char *cRet = ( char * ) hb_xgrab( nLenStr + 1 ); // Resultado

for( i = 0; i < nLenStr; i++ )
{
        for( n = 0; n < nLenFind; n++ )
        {
            fFind = cFind[ n ] == cString[ i ];
            if( fFind )
            {
                if( n < nLenRep )
                {
                    cRet[ w ] = cReplace[ n ];
                    w++;
                }
                break;
            }
        }

        if( !fFind )
        {
            cRet[ w ] = cString[ i ];
            w++;
            fFind = HB_FALSE;
        }
}

    cRet[ w ] = '\0';

return( cRet );
}

o esta otra:

char *cstrtran( const char *cString, HB_SIZE nLenStr, const char *cFind, HB_SIZE nLenFind, const char *cReplace, HB_SIZE nLenRep )
{
HB_SIZE i, n, w = 0;
    HB_BOOL fFind;
char *cRet = ( char * ) hb_xgrab( nLenStr + 1 );

for( i = 0; i < nLenStr; i++ )
{
        for( n = 0; n < nLenFind; n++ )
        {
            fFind = *( cFind + n ) == *( cString + i );

            if( fFind )
            {
                if( n < nLenRep )
                {
                    *( cRet + w++ ) = *( cReplace + n );
                }
                break;
            }
        }

        if( !fFind )
        {
            *( cRet + w++ ) = *( cString + i );
            fFind = HB_FALSE;
        }
}

    *( cRet + w ) = '\0';

return( cRet );
}

Tema cerrado

Salvador Pozo

Nº de hilos:0

Nº de mensajes:25

miércoles, 10 de marzo de 2021


Hola Salvador quisiera saber que es mas rápido y porqué en esta función usando array o punteros:

Hola:

En principio no debería haber diferencias significativas, ya que a nivel de código máquina los arrays y los punteros son lo mismo.

En cualquier caso, hay formas de medir la velocidad de una función, y algunas muy sencillas. Por ejemplo:

#include <iostream>
#include <ctime>

unsigned t1, t2;

...
t1 = std::clock();
// Llamar a tu función
t2 = std::clock();

double tiempo = (double(t2-t1)/CLOCKS_PER_SEC);

std::cout << "Tiempo: " << tiempo << std::endl;
Estas técnicas, y otras más elaboradas se suelen usar para optimizar funciones en aplicaciones donde el tiempo de ejecución es crítico.
Para evitar interferencias debidas a programas en segundo plano es recomendable ejecutar la función más de una vez, por ejemplo, cien veces, y el tiempo de ejecución se calcula dividiendo por el número de repeticiones.
Hasta pronto.

Tema cerrado

Manu Exposito

Nº de hilos:6

Nº de mensajes:14

miércoles, 10 de marzo de 2021


Como siempre muy agradecido.
Si los tiempos son similares creo que la sintaxis de array es más fácil de entender

Tema cerrado