mat a écrit :
J'ai trouvé aucun définition de memset dans string.h 
C'est peut-être dans
mem.h alors.
squale92
a écrit :
il me semble que dans tigcc, c pas dans string.h...
Si.
mais au niveau ANSI, il me semble que c défini dans string.h, non ?
Je ne sais pas. J'ai regardé les headers de
MinGW32, et chez eux, c'est dans
string.h, et il y a un
mem.h qui se contente d'inclure
string.h.
squale92 a écrit :
nEUrOne> oué, dérouler une boucle, ça rvient à ça
Pour que le memset du TIOS soit 3x plus rapide que le tien, il suffit que celui du TIOS soit plus déroulé que le tien...
enfin, Kevin précisera surement plus, à son habitude 
Ce que tu dis est à peu près correct, mais

le temps d'exécution d'un
memset se décompose en 2 temps:
- le temps de remplissage, qui ne change pas si on déroule la boucle
- l'overhead de la boucle, qui lui diminue effectivement d'un facteur de 3 si la boucle est 3 fois plus déroulée. Et si la boucle est totalement déroulée, l'overhead est nul.
Ceci fait que le temps total
ne diminue
pas d'un facteur de 3 si on déroule la boucle 3 fois plus! Et en fait, plus la boucle est déjà déroulée, moins on gagne de temps en déroulant encore plus, et plus on perd de la place en continuant à dérouler, donc la rentabilité diminue nettement au fur et à mesure du déroulement.
D'ailleurs, ça ne sert à rien de dérouler une boucle à la main en C, il suffit de passer
-funroll-loops à GCC. Et GCC fait aussi en sorte que la boucle soit déroulée
correctement. Le déroulement proposé par nEUrOne ne marche correctement
que si
n est multiple de 4. Et d'ailleurs, il faudrait d'abord convertir le tout en écriture
long par long avant de commencer à dérouler la boucle.