In genere, il rvalue viene "immagazzinata" all'interno del programma stesso.
In altre parole, il compilatore stesso (prima che il programma è sempre eseguito) calcola il + 5 10 - valore 3 (che può fare così poiché in quanto è tutto basato su valori immediati costanti), ed emette la codice assembly per memorizzare il risultato di questo calcolo in qualunque valore-l per l'assegnazione (in questo caso, la variabile denominata a, che il compilatore probabilmente conosce come indirizzo relativo a un'origine di segmenti di dati).
Il valore di R, che ha un valore di 12 è quindi trovato solo all'interno del binario del programma, all'interno di un'istruzioni di montaggio che sembra come
mov <some dest, typically DS-relative>, $0C
$ 0C è la "r-value ".
Se il valore r è il risultato di un calcolo che può essere eseguito solo in fase di esecuzione, dire se il codice c sottostante era: a = 17 * x; // x qualche runtime var, il valore r verrebbe anch'esso "memorizzato" (o meglio materializzato) come una serie di istruzioni all'interno del programma binario. La differenza con il semplice "mov dest, imm" sopra è che ci vorrebbero diverse istruzioni per caricare la variabile x in un accumulatore, moltiplicare per 17 e memorizzare il risultato all'indirizzo dove si trova la variabile a. È possibile che il compilatore può "autorizzare stessa" ;-) usare la pila per qualche risultato ecc intermedio ma tale sarebbe
a) completamente compilatore dipendente
b) transiant
c) e tipicamente occorrerebbe solo parte del valore r
è quindi sicuro dire che il valore r è un concetto in fase di compilazione che è incapsulato in parti del programma (non i dati) e non è memorizzato da nessuna parte ma nel programma binario.
In risposta a paxdiablo: la spiegazione offerta di cui sopra è davvero restrittiva delle possibilità perché lo standard C non in modo efficace non dettare qualcosa del genere. Nondimeno, la maggior parte di qualsiasi valore r viene alla fine materializzato, almeno in parte, da alcune istruzioni che impostano le cose in modo che il valore corretto, calcolato (in fase di esecuzione) o immediato, venga indirizzato correttamente.
È male che trovo "codice pezzo" esilarante? :) –
un bel riferimento SO: http: // stackoverflow.it/questions/79923/what-and-where-are-the-stack-and-heap – Derek
@eJames, può essere o non essere cattivo. Sospetto che la codetta non sia più in uso e molte persone potrebbero non sapere nemmeno di cosa si tratta (a meno che non abbiano guardato "BlackAdder"). – paxdiablo