Rust, jakie dane zawierają zmienną, która przypisała jej strukturę
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
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.