= 5;
она будет создана на стеке и значение тоже будет помещено на стек, а НЕ В ХИП, верно ведь? И если да, то какой объем памяти будет занимать в стеке (вообще сколько байт будет занимать в памяти переменные P.S. НЕ учитывает, что может быть еще ссылка на heap)?
Необязательно. В генераторах (async блоках), если те боксятся, локалы будут/могут быть в боксе. Так и надо в общем обычно. В идеале сначала будет искаться возможность устранить локал в принципе, после этого преобразовать/интегрировать его в (машинный) код, после этого хранить в регистре, и в крайнем случае на стек. Но семантически обычно можно считать стеком, да. usize занимает память в зависимости от архитектуры (по размеру как адрес, обычно 8 байт). Может меньше (оптимизации опять же). У самого стека ещё всякие приколы с выравниванием и паддингом в связи с ним, и не только, так что точно нельзя сказать, только нижнюю границу в худшем случае. Но волновать такое не должно, главное стек не переполнить, а для этого надо: 1. Не хранить огромные массивы на стеке 2. Не уходить в линейную рекурсию для достаточно больших n (порядка 1000-10000) 3. Иногда боксить футуры жирные
На сколько я понимаю, Rust работает с памятью следующим образом: let v : usize = 5; let t : i16 = 123; В данном случае v и t будет размещен на стеке, в следующем виде: Тип переменной | Длина | Значение |---------------|-------|---------| | 1 | 8 | 5 | |---------------|-------|---------| | 1 | 8 | 123 | |---------------|-------|---------| и т.д. или рассмотрим другой вариант с heap: let v : usize = Box::new(5); let t : i16 = Box::new(123); В данном случае v и t будет размещен на стеке, в следующем виде: Тип переменной | Длина | Значение |---------------|-------|----------------| | 2 | 8 | ссылка на heap | |---------------|-------|----------------| | 2 | 16 | ссылка на heap | |---------------|-------|----------------| и т.д. Уточните, пожалуйста, верно ведь?
Только длина измеряется в байтах, поэтому i16 два байта, а так да
Большое спасибо за уточнение!
А для чего программисту это знание? Я неправильно понимаю, что стек и куча это одна и та же оперативная память которая аллоцтруется сверху и снизу соответственно?
Это очень важно! И это не одно и тоже. Чуть выше я привел пример, как оно работает.
Обсуждают сегодня