Спасибо. А уточните, пожалуйста, при создании переменной: let v : usize

= 5;
она будет создана на стеке и значение тоже будет помещено на стек, а НЕ В ХИП, верно ведь? И если да, то какой объем памяти будет занимать в стеке (вообще сколько байт будет занимать в памяти переменные P.S. НЕ учитывает, что может быть еще ссылка на heap)?

6 ответов

16 просмотров

Необязательно. В генераторах (async блоках), если те боксятся, локалы будут/могут быть в боксе. Так и надо в общем обычно. В идеале сначала будет искаться возможность устранить локал в принципе, после этого преобразовать/интегрировать его в (машинный) код, после этого хранить в регистре, и в крайнем случае на стек. Но семантически обычно можно считать стеком, да. usize занимает память в зависимости от архитектуры (по размеру как адрес, обычно 8 байт). Может меньше (оптимизации опять же). У самого стека ещё всякие приколы с выравниванием и паддингом в связи с ним, и не только, так что точно нельзя сказать, только нижнюю границу в худшем случае. Но волновать такое не должно, главное стек не переполнить, а для этого надо: 1. Не хранить огромные массивы на стеке 2. Не уходить в линейную рекурсию для достаточно больших n (порядка 1000-10000) 3. Иногда боксить футуры жирные

­- Автор вопроса
Traveller Kolsky
Необязательно. В генераторах (async блоках), если ...

На сколько я понимаю, 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 | |---------------|-------|----------------| и т.д. Уточните, пожалуйста, верно ведь?

­
На сколько я понимаю, Rust работает с памятью след...

Только длина измеряется в байтах, поэтому i16 два байта, а так да

­- Автор вопроса

А для чего программисту это знание? Я неправильно понимаю, что стек и куча это одна и та же оперативная память которая аллоцтруется сверху и снизу соответственно?

­- Автор вопроса
Andrey Bodosov
А для чего программисту это знание? Я неправильно ...

Это очень важно! И это не одно и тоже. Чуть выше я привел пример, как оно работает.

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

Обсуждают сегодня

Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
7
Всем привет. Не понимаю, в чём тут шутка юмора. Убирается только разрешение на send_messages. А send_media_messages остаётся. Как сделать, чтобы оба убирались? await b...
Alexander
2
Есть тут кто занимается разработкой серваков майна? Или знакомые
meow *
3
'frakturBold' => ['𝖆', '𝖇', '𝖈', '𝖉', '𝖊', '𝖋', '𝖌', '𝖍', '𝖎', '𝖏', '𝖐', '𝖑', '𝖒', '𝖓', '𝖔', '𝖕', '𝖖', '𝖗', '𝖘', '𝖙', '𝖚', '𝖛', '𝖜', '𝖝', '𝖞', '𝖟', '𝕬', '𝕭', '𝕮', '𝕯'...
Roma
4
Есть ли лимиты на кол-во вебхук по домену? Стоит в данный момент 900+ ботов и бывает бот перестает отвечать (не приходят вебхуки) 🐒 Помогает только перезапуск
ᅠ [ Кому не ответил, дублируйте ]
11
а что делать если тебя убивают на картах?
Yarik yarik kyda ti lezesh
43
Товарищи, здравствуйте Подскажите, пожалуйста, может кто-нибудь сталкивался с такой задачей Через вебапку можно сканировать qr-код, а есть ли возможность считывать nfc?
Artem Stormageddon
8
Карта сайта