Sto leggendo il libro di Yung-Hsiang Lu, Intermediate C Programming, e sto lavorando al capitolo sulla memoria stack. Quando si definisce l'indirizzo del valore, fornisce questo esempio di codice:
int f1(int k, int m)
{
return (k + m);
}
void f2(void)
{
int u;
u = f1(7, 2);
// RL A
}
Prosegue descrivendo come nell'esempio precedente, l'indirizzo di u viene memorizzato prima che f1 venga chiamato in quello che chiama l'indirizzo di valore perché è l'indirizzo in cui è memorizzata la funzione di ritorno di f1.
Nel frame di f2, u è memorizzato in un indirizzo (ad esempio 100) con un valore di tipo. Quindi quando viene chiamato f1, lo stack procede nel frame di f1 con una posizione di ritorno su RL A, un indirizzo di valore con valore 100 e indirizzi per mek. L'esecuzione di f1 produce il valore 9, che viene scritto nel valore spazzatura all'indirizzo 100. Quindi, dopo il frame pop di f1, lo stack di chiamate consisterà nel frame f2 con il simbolo u all'indirizzo 100 con il valore 9.
Fin qui tutto bene, ma dove non sono chiaro è l'indirizzo di valore del frame f1 se invece di u = f1 (7, 2) avessimo u = f1 (7, 2) + 5 o se eri una qualche altra funzione di f1 non uguale a f1. Non mi sembra che il valore di f1 verrebbe semplicemente scritto nel valore della spazzatura originale in questo caso, poiché u non è uguale a f1.
Quindi penso che forse non capisco cosa intenda esattamente con "l'indirizzo del valore".
Qualcuno può chiarire?