Rust, какие данные содержат переменную, которая присвоила ей структуру

Jan 16 2021

Если у нас есть следующий код:

struct Person {
    age: i32
}

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

Я знаю, как использовать структуру и все остальное, кроме того, что на самом деле внутри переменной человека?

Это указатель на первый элемент структуры? (Поскольку все элементы смежны (?), Поэтому компилятор будет знать, где находятся все элементы)

Ответы

5 Acorn Jan 16 2021 at 21:03

что на самом деле внутри переменной человека?

Единственное, что "внутри" age, всего 4 байта.

Это указатель на первый элемент структуры?

Нет, это не указатель. Это просто само значение, что означает, что оно будет сохранено в стеке текущего кадра / функции, практически говоря (компилятор может полностью удалить его из памяти или даже не использовать его, если наблюдаемое поведение не изменится, но это это оптимизация: концептуально переменная помещается в стек).

(Поскольку все элементы смежны (?), Поэтому компилятор будет знать, где находятся все элементы)

Компилятор большинства компилируемых языков всегда знает точное расположение всех типов (кроме особых случаев). По этой причине многие оптимизации могут быть выполнены на этих языках заранее. Эта информация обычно отбрасывается в языках системного программирования, поэтому они обычно не поддерживают отражение и почему их довольно сложно декомпилировать обратно в исходный код.