Bonjour,
Je suis de retour avec une question très générale sur le langage C. Je mets ci dessous un petit exemple codé rapidement d’une implémentation d’une fonction qui copie le contenu d’une chaine de caractères dans une autre. C’est ultra basique et la librairie standard fournit déjà des solutions à ce problème. Mais justement.
Est-ce que le langage C permet bien de faire les codes les plus rapides qui soient ? Je veux dire, est-ce que les programmes les plus gourmands et les plus optimisés sont codés en C ? Ou auraient intérêt à l’être ? Ou pourraient avoir intérêt à l’être ?
J’ai déjà un peu codé en python et pour l’exemple, on ne faisait pas de manipulations sur les images pixel par pixel en python car c’était beaucoup trop lent. On utilisait des librairies apparemment codées en C qui faisaient ces manipulations basiques.
En bref, quand je code un algo de copie d’une chaine dans une autre comme ci-dessous, ai-je la garantie que si je m’y prends pas comme un pied, les performances seront très similaires à celles de la librairie standard, et donc je suppose, de ce qui se fait de plus optimisé pour un tel algo ? La librairie standard est-elle codée en assembleur pour optimiser encore plus ? Et est-ce que coder en assembleur produirait des algos encore plus rapides, ou bien est-ce que le langage C est déjà au max ?
Et enfin, même si je compte un jour aller y jeter un œil par moi-même, est-ce que les codes de la librairie standard sont à peu près compréhensibles pour un être humain qui connaît le langage C rapidement, où est-ce qu’elle a été codée par des sorciers qui utilisent des goto toutes les 3 lignes pour ne pas perdre la moindre nanoseconde de temps ?
Le code en question :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void stringCopy(char* dest, const char* src, size_t sizeDest)
{
if (sizeDest > 0)
{
size_t indexDest;
for (indexDest = 0; indexDest < sizeDest - 1; indexDest++)
{
dest[indexDest] = src[indexDest];
if (src[indexDest] == '\0') break;
}
dest[indexDest] = '\0';
}
}
int main()
{
char dest[100];
stringCopy(dest, "coucou le monde", 100);
printf("dest : %s\n", dest);
return 0;
}