В предыдущем разделе мы рассмотрели примитивные типы данных, доступные в rust, в следующем мы рассмотрим, как в rust используются строки.

Примечание. Пожалуйста, ознакомьтесь с предыдущим разделом руководства, чтобы понять, что такое типы данных в rust.

Предыдущий раздел:https://medium.com/@manikandan96372/rust-for-beginners-part-4-data-types-a99f89da7101

Прежде чем перейти к работе со строками, мы должны иметь общее представление о том, как работают стек и куча и как они используются в ржавчине.

Стек и куча — это два разных типа памяти, которые делают системную память доступной для вашей программы на rust во время выполнения. Посмотрим на их реализацию

СТЕКЛО

Стек в основном следует подходу LIFO (последний пришел первым). В rust переменные, требуемая память которых является известной или фиксированной, затем помещаются в стек одна за другой и очищаются из памяти в обратном направлении.

let A: i32 = 100;
let B: i8 = 2;
let C: i16 = 25;

В приведенном выше фрагменте мы объявляем переменные A, B и C и присваиваем им определенное значение, при объявлении которого мы знаем, что для этого требуется i32, i8 и i16 бит памяти, и оно фиксируется, если мы пытаемся переместиться выше лимит памяти, компилятор rust выдал бы ошибку, так что в этом случае мы точно знаем, каковы требования к памяти.

Таким образом, стек является правильным подходом для распределения памяти здесь, поскольку стек ожидает, что его хранилище будет вести себя таким же образом.

то есть, если переменные A, B и C требуют фиксированного пространства в памяти и помещаются в стек в порядке A, B и C, после завершения выполнения память будет очищена в порядке C, B и A, потому что C сначала выталкивается из стека, а остальные следуют в том же порядке. Вставка между стеком или удаление из середины стека невозможно, поскольку стек не поддерживает такой подход.

Хорошо, но целые числа — не единственный тип, который мы будем использовать в нашей программе, верно? Будет динамическое требование, когда нам придется изменить память, используемую конкретными переменными, например «Строки», вы не можете определить строку, содержащую только определенный набор символов, если пользователь предоставляет динамические значения во время выполнения, он должен быть готов к справиться с ними, но стек не поддерживает этот динамический подход, так какое же возможное решение?

Сейчас начнется ,

КУЧА

Куча не следует организованному подходу, такому как стек, который использует LIFO, вместо этого, если вы хотите выделить память с использованием кучи, ваш распределитель памяти будет искать в куче определенный объем пространства для вашего хранилища и возвращает «адрес», правильная терминология, используемая в rust — «указатель», как только мы получим этот указатель, мы сохраним его в стеке.

Но подождите… только что мы увидели, что стек не поддерживает такой подход к динамическому распределению памяти, но как тогда мы будем хранить ее в стеке?

Здесь следует отметить, что мы храним в стеке только адрес, который имеет фиксированный размер, но его содержимое все еще находится внутри кучи.

Таким образом, Rust эффективно использует стек и кучу для распределения памяти.

Теперь у нас есть понимание того, как стек и куча используются в rust, давайте обсудим строки в следующем разделе.