Распределяет ли String :: from_utf8_lossy () память? - PullRequest
0 голосов
/ 05 февраля 2020

Я хочу преобразовать первые 10 байтов массива в строку.

Если я сделаю String::from_utf8_lossy(), это вернет &str.

Правильно ли я понимаю, что &str это адрес этих 10 байтов, и фактически память будет выделена только для создания ссылки?

1 Ответ

6 голосов
/ 05 февраля 2020

Цитирование из документов для String::from_utf8_lossy

Эта функция возвращает Cow<'a, str>. Если наш фрагмент байта недопустим в формате UTF-8, то нам нужно вставить заменяющие символы, что изменит размер строки и, следовательно, потребует String. Но если это уже UTF-8, нам не нужно новое распределение. Этот тип возврата позволяет нам обрабатывать оба случая.

Таким образом, он не возвращает &str, а скорее Cow<str>, а выделяет только при необходимости замену недопустимых байтов на «�».

В общем, если функция действительно возвращает &str, то &str не будет (заново) выделяться. Он будет либо stati c (встроен в сам двоичный файл), либо будет иметь время жизни, полученное из некоторого аргумента функции (например, String::trim).

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