Schauen Sie sich zuerst dieses Beispiel an:
Der C-Code für ein einfaches C-Programm ist unten angegeben
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;
}
Der äquivalente ASM-Code für foo_assign () lautet
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
Wie Sie sehen können, wird eine Zuweisung in der Baugruppe einfach durch eine Anweisung "mov" ersetzt. Der Zuweisungsoperator bedeutet einfach, Daten von einem Speicherort an einen anderen Speicherort zu verschieben. Die Zuweisung wird nur für unmittelbare Mitglieder einer Struktur ausgeführt und kann nicht kopiert werden, wenn Sie komplexe Datentypen in einer Struktur haben. Hier bedeutet KOMPLEX, dass Sie kein Array von Zeigern haben können, die auf Listen zeigen.
Ein Array von Zeichen innerhalb einer Struktur funktioniert auf den meisten Compilern selbst nicht. Dies liegt daran, dass die Zuweisung einfach versucht, zu kopieren, ohne den Datentyp als komplex anzusehen.