Size: a a a

Rust — русскоговорящее сообществo

2020 August 23

В

Вафель in Rust — русскоговорящее сообществo
Эрик
Ну это только напрямую через Layout и аллокатор, тебе ссылку уже дали.
Эх, а я только подумал что без этого ужаса можно будет обойтись
источник

V

Vladimir in Rust — русскоговорящее сообществo
Вафель
Нет наверное. Тогда у него размер тоже 8 будет
А если вместе с dst объединить

#[align]
struct DST{
data:[u8]
}

?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вафель
Я просто с чем извращаюсь: я пытаюсь в начале [u8] хранить некоторое количество usize.

Со-но для этого у слайса должен быть aligment usize
Ну можно. Но тебе его надо завернуть так, чтобы на каждую реаллокацию и дроп он обратно превращался в &[usize]
источник

В

Вафель in Rust — русскоговорящее сообществo
Vladimir
А если вместе с dst объединить

#[align]
struct DST{
data:[u8]
}

?
Проблема в том, что такой тип ещё создать надо
источник

V

Vladimir in Rust — русскоговорящее сообществo
Вафель
Проблема в том, что такой тип ещё создать надо
Ну на хипе ж вроде можно?
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
Ну можно. Но тебе его надо завернуть так, чтобы на каждую реаллокацию и дроп он обратно превращался в &[usize]
Так он не &[usize], в том-то и проблема. там только начало
источник

V

Vladimir in Rust — русскоговорящее сообществo
И тогда тебе даже алигн не нужен, просто добавь поля
источник

В

Вафель in Rust — русскоговорящее сообществo
Vladimir
Ну на хипе ж вроде можно?
Ну только если ручками аллокатор дёргать, что не просто. Но выбора у меня особо нет ¯\_(ツ)_/¯
источник

В

Вафель in Rust — русскоговорящее сообществo
Vladimir
И тогда тебе даже алигн не нужен, просто добавь поля
у меня динамическое кол-во usize'ов
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вафель
Так он не &[usize], в том-то и проблема. там только начало
Есть вариант аллоцировать слайсу байтов, а потом просто из неё сделать другую слайсу, нужную тебе, сбросив X байтов в начале, чтобы align был как надо.
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
Есть вариант аллоцировать слайсу байтов, а потом просто из неё сделать другую слайсу, нужную тебе, сбросив X байтов в начале, чтобы align был как надо.
Ну тоже вариант, хотя неприятно что место теряется
источник

В

Вафель in Rust — русскоговорящее сообществo
(я знаю, я сам себе злобный буратино с такими извращёнными задачами)
источник

V

Vladimir in Rust — русскоговорящее сообществo
struct Bla<T,U>{
usizes: T,
data: U
}

Bla::<[usize;3], [u8; 120]>
источник

В

Вафель in Rust — русскоговорящее сообществo
Vladimir
struct Bla<T,U>{
usizes: T,
data: U
}

Bla::<[usize;3], [u8; 120]>
Тут уже завтипы нужны :)

3 и 120 в данном случае не константы
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вафель
Тут уже завтипы нужны :)

3 и 120 в данном случае не константы
Так у тебя в начале юсайзы будут?
источник

V

Vladimir in Rust — русскоговорящее сообществo
А ну и два dst наверное нельзя.
Тогда только лейаут
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
Так у тебя в начале юсайзы будут?
Да
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ну делаешь что-то вроде

stuct Qwe {
 v: Vec<usize>,
 bytes_from: usize,
 bytes_len: usize,
}

impl Qwe {
 pub fn new(usizes: usize, bytes: usize) -> Self {
   let v = Vec::with_capacity(usizes + bytes / size_of::<usize>() + (bytes % size_of::<usize>() != 0) as usize);
   Self { v, bytes_from: usizes, bytes_len: bytes }
 }
}
источник

Э

Эрик in Rust — русскоговорящее сообществo
И потом просто на указателях пишешь в память.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Количество usize'ов всегда известно?
источник