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 );
}
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.
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