Verrostet, welche Daten eine Variable enthalten, der sie eine Struktur zugewiesen hat

Jan 16 2021

Wenn wir den folgenden Code haben:

struct Person {
    age: i32
}

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

Ich weiß, wie man die Struktur benutzt und alles außer was tatsächlich in der Personenvariablen?

Ist es ein Zeiger auf das erste Element der Struktur? (Da alle Elemente zusammenhängend sind (?), Weiß der Compiler, wo sich alle Elemente befinden.)

Antworten

5 Acorn Jan 16 2021 at 21:03

Was ist eigentlich in der Personenvariablen?

Das einzige, was "drinnen" ist age, sind insgesamt 4 Bytes.

Ist es ein Zeiger auf das erste Element der Struktur?

Nein, es ist kein Zeiger. Es ist nur der Wert selbst, was bedeutet, dass er praktisch im Stapel des aktuellen Frames / der aktuellen Funktion gespeichert wird (der Compiler kann ihn vollständig aus dem Speicher entfernen oder ihn nicht einmal verwenden, wenn sich das beobachtbare Verhalten nicht ändert, aber das ist eine Optimierung: Konzeptionell wird die Variable in den Stapel gelegt).

(Da alle Elemente zusammenhängend sind (?), Weiß der Compiler, wo sich alle Elemente befinden.)

Der Compiler in den meisten kompilierten Sprachen kennt immer das genaue Layout aller Typen (außer in Sonderfällen). Aus diesem Grund können viele Optimierungen in diesen Sprachen im Voraus vorgenommen werden. Diese Informationen werden normalerweise in Systemprogrammiersprachen verworfen, weshalb sie normalerweise keine Reflexion unterstützen und es ziemlich schwierig ist, sie wieder in Quellcode zu dekompilieren.