Rust, jakie dane zawierają zmienną, która przypisała jej strukturę

Jan 16 2021

Jeśli mamy następujący kod:

struct Person {
    age: i32
}

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

Wiem, jak używać struktury i wszystkiego, ale co właściwie znajduje się w zmiennej person?

Czy jest to wskaźnik do pierwszego elementu struktury? (Ponieważ wszystkie elementy są ciągłe (?), Więc kompilator będzie wiedział, gdzie są wszystkie elementy)

Odpowiedzi

5 Acorn Jan 16 2021 at 21:03

co właściwie znajduje się w zmiennej person?

Jedyną rzeczą „wewnątrz” jest agełącznie 4 bajty.

Czy jest to wskaźnik do pierwszego elementu struktury?

Nie, to nie jest wskaźnik. Jest to po prostu sama wartość, co oznacza, że ​​praktycznie rzecz biorąc będzie przechowywana na stosie bieżącej ramki / funkcji (kompilator może ją całkowicie usunąć z pamięci lub nawet jej nie używać, jeśli obserwowalne zachowanie się nie zmieni, ale że jest optymalizacją: koncepcyjnie zmienna jest umieszczana na stosie).

(Ponieważ wszystkie elementy są ciągłe (?), Więc kompilator będzie wiedział, gdzie są wszystkie elementy)

Kompilator w większości kompilowanych języków zawsze zna dokładny układ wszystkich typów (z wyjątkiem specjalnych przypadków). Z tego powodu wiele optymalizacji można przeprowadzić w tych językach z wyprzedzeniem. Informacje te są zwykle odrzucane w językach programowania systemów, dlatego zwykle nie obsługują one refleksji i dlatego dość trudno jest je z powrotem zdekompilować do kodu źródłowego.