его буффером память (я её к этому моменту в другой вектор засунул через Vec::from_raw_parts())?
forget может какой-нибудь?
а как ты получаешь буффер вектора? into_raw_parts забирает владение вектором и отдает память тебе под контроль, например
а разве тебе не ::into_raw_parts нужен?
let capacity = values.capacity(); let ptr = values.as_mut_ptr();
Я так чисто по ламерски, но может Vec<Option<T>> при занулвании значений оставит прежнюю память?)
а зачем так, когда есть into_raw_parts, который получает эти значения и дропает вектор
Он не стабильный и мне не надо его сразу дропать. Мне надо из него последовательно считать значения сконвертить их в другой тип и запихнуть в тот новый вектор, который я создал на основе буфера первого. Т.е. мне надо сконвертить Vec<f64> в Vec<i32> не выделяя новой памяти.
2 вектора с одним буфером ты использовать одновременно не можешь, если что
ну тогда да, ManuallyDrop
Почему же не могу - вроде всё нормально заработало. И да, пришлось заюзать unsafe, что бы создать новый вектор из указателя на буфер первого вектора.
Ну как что, UB у тебя)
из той же памяти создавать вектор с другим типом - а не УБ ли это :)) тут всякие моменты с align, освобождением памяти, размером границ встают.
С чего бы? i32 в два раза меньше чем f64. Я в цикле читаю последовательно все f64, и потом в этот же буфер записываю i32. i32 никогда не догонят f64.
У тебя 2 вектора существуют одновременно?
Обсуждают сегодня