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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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?
Partager