@TicSo

Как реализована и хранится связь между именем переменной и ссылкой?

Возможно найдется желающий пояснить азы в контексте заданных вопросов, спасибо.
Как реализовано определение по имени переменной её актуальной ссылки?
Мутабельность определяется исходя из области расположения в стеке
или тоже где-то хранится признак?
В коде ниже `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
}
  • Вопрос задан
  • 138 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы