Size: a a a

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

2020 August 23

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Так. Нужна unsized структура, содержащая в начале несколько usize, а потом несколько u8?
Почему бы не хранить [usize] и при необходимости хвост трансмьютить в &[u8]?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ладно, а Box ты как сделаешь?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Он же не стабильный и спрятанный за box кейвордом.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Трансмутить FatPtr?
источник

В

Вафель in Rust — русскоговорящее сообществo
Эрик
Ладно, а Box ты как сделаешь?
аллоцирую память + Box::from_raw
источник

В

Вафель in Rust — русскоговорящее сообществo
Mikail Bagishov
Так. Нужна unsized структура, содержащая в начале несколько usize, а потом несколько u8?
Почему бы не хранить [usize] и при необходимости хвост трансмьютить в &[u8]?
Чтобы наикономить 7 байтов конечно же! 🙃
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вафель
Чтобы наикономить 7 байтов конечно же! 🙃
Кек.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Они всё равно из-за align западдятся.
источник

В

Вафель in Rust — русскоговорящее сообществo
лол
источник

V

Vladimir in Rust — русскоговорящее сообществo
Вафель
Чтобы наикономить 7 байтов конечно же! 🙃
А где ты там 7 байт нашел?
источник

Э

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

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Имхо, вместо  (или дополнительно к)
fn new_box(...) -> Box<Self>
Лучше сделать
fn get_layout(...) -> Layout;
unsafe fn new_in(..., place: &mut [MaybeUninit<u8>];
Тогда такой тип будет легче влезать в смарт поинтеры
источник

В

Вафель in Rust — русскоговорящее сообществo
Vladimir
А где ты там 7 байт нашел?
[1u8] это 1 байт, а [1usize] — 8

Хвост из u8 по идее может потерять 0-7 байт места. Впрочем не уверен что это правда, как заметил @iccsf они всё равно на padding из-за aligment уйдут
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Vladimir
А где ты там 7 байт нашел?
Ну пусть мы хотели в хвосте хранить 9 u8. Нам придется выделить 2 usize, то есть 7 байт потеряно.
источник

В

Вафель in Rust — русскоговорящее сообществo
Mikail Bagishov
Имхо, вместо  (или дополнительно к)
fn new_box(...) -> Box<Self>
Лучше сделать
fn get_layout(...) -> Layout;
unsafe fn new_in(..., place: &mut [MaybeUninit<u8>];
Тогда такой тип будет легче влезать в смарт поинтеры
Спасибо за совет, учту
источник

В

Вафель in Rust — русскоговорящее сообществo
Mikail Bagishov
Ну пусть мы хотели в хвосте хранить 9 u8. Нам придется выделить 2 usize, то есть 7 байт потеряно.
this
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Обязательно ли они теряются или нет я не уверен.
источник

V

Vladimir in Rust — русскоговорящее сообществo
Mikail Bagishov
Обязательно ли они теряются или нет я не уверен.
Ну там же уже написали про то что они на падинг уйдут, так что все нормально. (Уйдут потому что элементы массива должны быть выровнены)
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Vladimir
Ну там же уже написали про то что они на падинг уйдут, так что все нормально. (Уйдут потому что элементы массива должны быть выровнены)
Ну по идее в паддинг структуры не будут включены.
источник

В

Вафель in Rust — русскоговорящее сообществo
Mikail Bagishov
Обязательно ли они теряются или нет я не уверен.
Вот я тоже
источник