Je développe un logiciel qui doit manipuler des chaînes de caractères.
Pour gérer les erreurs, j'ai écrit une version personnalisée de strcat. Ceci me permet de contrôler que les tableaux se terminent bien par '\0', et que le tableau qui est concaténé a suffisamment de place.
Puis pour la version release, j'utilise strcat du C standard, lorsque bien sur je sais que mes initialisations et mes gestions de tableaux sont correctes.
Mais par curiosité j'ai écrit des versions de strcat et j'ai comparé les vitesses d'exécution:
Code:
1
2
3
4
5
6
7
8
9 void szcpy2(char* tab1, const char* tab2){ tab1 += strlen(tab1); while(*tab2) *tab1++ = *tab2++; *tab1 = '\0'; }
Code:
1
2
3
4
5
6
7
8
9 void szcpy1(char* tab1, const char* tab2, size_t iSize){ tab1 += iSize; while(*tab2) *tab1++ = *tab2++; *tab1 = '\0'; }
J'ai affiché les fonctions de la plus rapide à la moins rapide. Et bien à ma grande surprise il y a une différence significative avec la fonction strcat du C standard. Je me demande comment se fait-il que mes fonctions soient beaucoup plus lentes.Code:
1
2
3
4
5
6
7
8
9
10 void szcpy(char* tab1, const char* tab2){ while(*tab1) tab1++; while(*tab2) *tab1++ = *tab2++; *tab1 = '\0'; }
Est-ce que strcat est écrit en assembleur? Ou alors mes codes sont-ils pourris?