Ruggine i dati che contengono una variabile che gli ha assegnato una struttura

Jan 16 2021

Se abbiamo il seguente codice:

struct Person {
    age: i32
}

fn main() {
    let person =  Person{age : 52};
}

So come usare la struttura e tutto ma cosa effettivamente all'interno della variabile persona?

È un puntatore al primo elemento della struttura? (Perché tutti gli elementi sono contigui (?) Quindi il compilatore saprà dove sono tutti gli elementi)

Risposte

5 Acorn Jan 16 2021 at 21:03

cosa effettivamente all'interno della variabile persona?

L'unica cosa "dentro" è age, per un totale di 4 byte.

È un puntatore al primo elemento della struttura?

No, non è un puntatore. È solo il valore stesso, il che significa che verrà memorizzato nello stack del frame / funzione corrente, in pratica (il compilatore può rimuoverlo completamente dalla memoria o addirittura non usarlo, se il comportamento osservabile non cambia, ma quello è un'ottimizzazione: concettualmente, la variabile è posta nello stack).

(Perché tutti gli elementi sono contigui (?) Quindi il compilatore saprà dove sono tutti gli elementi)

Il compilatore nella maggior parte dei linguaggi compilati conosce sempre il layout esatto di tutti i tipi (eccetto casi speciali). Questo è il motivo per cui molte ottimizzazioni possono essere fatte in quelle lingue prima del tempo. Queste informazioni vengono normalmente scartate nei linguaggi di programmazione di sistema, motivo per cui di solito non supportano la riflessione e perché è abbastanza difficile decompilarle nuovamente nel codice sorgente.