Pomôžte mi pochopiť, ako kompilátor / OS reaguje na nasledujúci riadok programu v jazyku C,
int c;
void task1()
{
c+=c; // This line is actually c=c+c; 2 read point 1 write
}
Bude pamäť čítať dvakrát alebo len raz?
odpovede:
0 pre odpoveď č. 1To závisí od procesora, kompilátora amožnosti kompilátora. Na procesore, ktorý má inštrukciu s násobením pamäte a kompilátorom, ktorý nie je v režime ladenia, môžete získať kód vygenerovaný ako niečo ako
MULL2 #2, C
Pamäť sa prečíta raz a zapíše sa raz. Na procesore, ktorý vykonáva všetky operácie v registroch, môžete získať niečo ako:
MOVL C, R3
MULL #2, R3
MOVL R3, C