172 похожих чатов

Если у меня есть вектор энумов enum X{

num(u64),
vec(Box<Y>)
}
и я хочу сэкономить память на тэг, имею ли я право сделать два вектора: один с тэгом (просто число 0/1), а во втором хранить юнионы?

12 ответов

19 просмотров

Была статья про такой подход в зиге

Artem- Автор вопроса
О. К
Была статья про такой подход в зиге

Да, я видел. С неё и подумал. Мне просто оч полезно было бы. Я б потом ещё тэги 0/1 упаковал в биты, и выиграл бы 2х по памяти

Это не стд буть осторожен

Если не будешь использовать repr(Rust), то можешь в теории. А иначе немного непонятно, как будет тег доставаться.

Тэг наверное в вектор, тогда экономия на отступе

Artem- Автор вопроса
Traveller Kolsky
Если не будешь использовать repr(Rust), то можешь ...

доступ по индеску. Т.е. типа я кладу в один вектор 0/1 в зависимости от типа данных. А во второй вектор - юнион. В итоге у меня вместо 16 байт энума выходит 8 байт и один бит за счёт BiteVec. Обратно чтение всегда по индексу - читаю тэг из вектора тэгов, читаю union через unsafe в нужном виде. У меня просто ооооооочень большие вектора, поэтому сэкономить на таком хочется.

О. К
Тэг наверное в вектор, тогда экономия на отступе

Если хотим паковать, надо знать значение тега, которое Discriminant не экспоузит

Traveller Kolsky
Если хотим паковать, надо знать значение тега, кот...

тут чел руками теги конструирет, без енумов, все ок будет

Mikail Bagishov
тут чел руками теги конструирет, без енумов, все о...

Смотря как внешнее взаимодействие будет работать

Фраза перед сегфолтом

О. К
Фраза перед сегфолтом

я другое имел в виду, но смешно вышло, соглы)

Кстати, можно чуть-чуть потерять переносимость и сократить num до u63, тогда битвек будет не нужен

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта