Regardez d'abord cet exemple:
Le code C pour un programme C simple est donné ci-dessous
struct Foo {
char a;
int b;
double c;
} foo1,foo2;
void foo_assign(void)
{
foo1 = foo2;
}
int main(/*char *argv[],int argc*/)
{
foo_assign();
return 0;
}
Le code ASM équivalent pour foo_assign () est
00401050 <_foo_assign>:
401050: 55 push %ebp
401051: 89 e5 mov %esp,%ebp
401053: a1 20 20 40 00 mov 0x402020,%eax
401058: a3 30 20 40 00 mov %eax,0x402030
40105d: a1 24 20 40 00 mov 0x402024,%eax
401062: a3 34 20 40 00 mov %eax,0x402034
401067: a1 28 20 40 00 mov 0x402028,%eax
40106c: a3 38 20 40 00 mov %eax,0x402038
401071: a1 2c 20 40 00 mov 0x40202c,%eax
401076: a3 3c 20 40 00 mov %eax,0x40203c
40107b: 5d pop %ebp
40107c: c3 ret
Comme vous pouvez voir qu'une affectation est simplement remplacée par une instruction "mov" dans l'assemblage, l'opérateur d'affectation signifie simplement déplacer des données d'un emplacement mémoire à un autre emplacement mémoire. L'affectation ne le fera que pour les membres immédiats d'une structure et échouera à la copie lorsque vous avez des types de données complexes dans une structure. Ici, COMPLEX signifie que vous ne pouvez pas avoir de tableau de pointeurs, pointant vers des listes.
Un tableau de caractères dans une structure ne fonctionnera pas lui-même sur la plupart des compilateurs, car l'affectation essaiera simplement de copier sans même regarder le type de données comme étant de type complexe.