num(u64),
vec(Box<Y>)
}
и я хочу сэкономить память на тэг, имею ли я право сделать два вектора: один с тэгом (просто число 0/1), а во втором хранить юнионы?
Была статья про такой подход в зиге
Да, я видел. С неё и подумал. Мне просто оч полезно было бы. Я б потом ещё тэги 0/1 упаковал в биты, и выиграл бы 2х по памяти
Это не стд буть осторожен
Если не будешь использовать repr(Rust), то можешь в теории. А иначе немного непонятно, как будет тег доставаться.
Тэг наверное в вектор, тогда экономия на отступе
доступ по индеску. Т.е. типа я кладу в один вектор 0/1 в зависимости от типа данных. А во второй вектор - юнион. В итоге у меня вместо 16 байт энума выходит 8 байт и один бит за счёт BiteVec. Обратно чтение всегда по индексу - читаю тэг из вектора тэгов, читаю union через unsafe в нужном виде. У меня просто ооооооочень большие вектора, поэтому сэкономить на таком хочется.
Если хотим паковать, надо знать значение тега, которое Discriminant не экспоузит
тут чел руками теги конструирет, без енумов, все ок будет
Смотря как внешнее взаимодействие будет работать
Фраза перед сегфолтом
я другое имел в виду, но смешно вышло, соглы)
Кстати, можно чуть-чуть потерять переносимость и сократить num до u63, тогда битвек будет не нужен
Обсуждают сегодня