Возможно найдется желающий пояснить азы в контексте заданных вопросов, спасибо.
Как реализовано определение по имени переменной её актуальной ссылки?
Мутабельность определяется исходя из области расположения в стеке
или тоже где-то хранится признак?
В коде ниже `pointer on ?` получен адрес
чего и правильно ли подписаны другие?
Верно ли понимаю, что
для данных типа String cтек всегда хранит `указатель` на кучу `len` и `cap` ,
а данные типа &str тоже лежат в куче, если они созданы как срез от данных типа String,
тогда стек хранит `указатель` на кучу и этот срез (диапазон по двум адресам стека?),
если данные типа &str созданы в программе и небольшие, - они могут храниться только
в стеке без участия кучи и создания указателя на неё, например, как числовые типы?
fn main() {
let s1: String = "abc".to_string();
println!("{:?}", s1.as_ptr()); // pointer on heap 0x56149d7a69b0
println!("{:?}", &s1.as_ptr()); // pointer on heap 0x56149d7a69b0
println!("{:p}", &s1.as_ptr()); // pointer on ? 0x7ffee168cf88
println!("{:?}", &s1 as *const String); // referenсe on stack 0x7ffc7b7e8068
println!("{:p}", &s1); // referenсe on stack 0x7ffc7b7e8068
println!();
let s2: &str = "qwe";
println!("{:p}", &s2.as_ptr()); // pointer on ? 0x7ffed3a1f8e8
}