Как функция может вернуть динамическое c число байтов без динамического c выделения памяти? - PullRequest
1 голос
/ 21 января 2020

Я бы хотел, чтобы функция возвращала динамическое число c байтов в диапазоне от 1К до 60К. Я не могу использовать динамическое распределение памяти c, поэтому я не могу использовать Vec. Я также не могу вернуть срез в локальный массив функций. Rust не имеет g cc -подобных динамических c стековых массивов. Я не верю, что могу изменить размер массива, то есть выделить больший фиксированный массив, а затем освободить часть памяти в конце. Какие еще варианты у меня есть?

1 Ответ

1 голос
/ 24 января 2020

Похоже, что то, что вы ищете, невозможно.

Я не могу использовать динамический c выделение памяти

Для меня это звучит как компилятор- сгенерированный код не может использовать динамическое выделение памяти (куча). Тогда единственное место, где вы можете сохранить весь результат - это стек звонящего. Размер стека должен быть известен во время компиляции.

Возможным решением может быть возвращение массива с заранее заданным размером и размером фактических данных. Например,

fn generate_data() -> ([i32; 50000], usize)

Или вы можете выделить память в стеке вызывающей стороны и затем предоставить ссылку на функцию генерации данных:

fn generate_data(out: &mut [i32; 50000]) -> usize

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

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