URL: https://linuxfr.org/forums/programmation-c--2/posts/copie-rapide-de-tableau Title: Copie rapide de tableau Authors: Ontologia Date: 2005年02月03日T12:00:23+01:00 Tags: Score: 0 Bonjour, j'ai un gros tableau de char, je me dis, "tiens ce serait plus rapide de mettre mes valeurs dedans en les castant en tant qu'unsigned long, ça ira beaucoup plus vite (on a des proc 32 bits, c'est stupide de ne pas en profiter) " Donc, j'aimerai comprendre pourquoi quand j'écris #include stdio.h; char tab[4096000]; int main(void) { £spaces£ £/spaces£int i; £spaces£ £/spaces£char c; £spaces£ £/spaces£for(i=0;i<;4096000;i++) tab[i]='c'; £spaces£ £/spaces£for(i=0;i<;4096000;i++) printf("%d",tab[i]); £spaces£ £/spaces£c = getchar(); £spaces£ £/spaces£for(i=0;i<1024000;i++) (unsigned long)tab[i<<2]=(unsigned long)(45); £spaces£ £/spaces£c = getchar(); £spaces£ £/spaces£for(i=0;i<4096000;i++) printf("%d",tab[i]); £spaces£ £/spaces£return 0; } il ne me cast pas correctement en asm comme je le voudrai : pour la 1ère boucle j'ai .LM1: £spaces£ £/spaces£movl $tab,%esi £spaces£ £/spaces£movl 4095999,ドル%ebx £spaces£ £/spaces£movl $tab+4095999,%eax £spaces£ £/spaces£.p2align 4,,7 .L21: £spaces£ £/spaces£_ **movb 99,ドル(%eax)**_ £spaces£ £/spaces£decl %eax £spaces£ £/spaces£decl %ebx £spaces£ £/spaces£jns .L21 Normal, rien à dire Par contre pour la seconde : .LM5: £spaces£ £/spaces£movl 1023999,ドル%ebx £spaces£ £/spaces£movl $tab+4095996,%eax £spaces£ £/spaces£.p2align 4,,7 .L32: £spaces£ £/spaces£_ **movb 45,ドル(%eax)**_ £spaces£ £/spaces£addl $-4,%eax £spaces£ £/spaces£decl %ebx £spaces£ £/spaces£jns .L32 Je comprend pas qu'il me mette un movb ! Je lui ai demandé un movl !! Comment solutionner ce problème ** sans passer par une fonction standard (genre memcpy) ** : je me demande comment solutionner ce problème sans librairie, avec une simple boucle... ? C'est une limitation de Gcc ?