intrusive optional, чтобы можно было как-нибудь хранить флаг out-of-band? я знаю, что уже мечтал здесь о том, чтобы хранить его внутри объекта-пациента, но хотя бы чтобы можно было на 8✕optional<uint64_t> не 128 байт тратить, а 72? мб boost?
int64.alignof==8, потому на 8+флажок1 идет выравнивание до 8ми, а потому 1 optional<int64> занимает 16б, можешь попробовать специализировать opt, если знаешь, где в payload "спрятать" доп.бит
я знаю, я об этой проблеме и говорю :) фиг с ним, не умеем прятать флаг в payload, но можно было бы просто флаги отдельно хранить, а-ля SoA
тогда иди в D, там можно так извращаться :) https://dlang.org/
В указателях как раз зачастую спрятать бит можно
я тож както думал: чо нет ЯП, в котором опшеналы T? - 1st-class-citizens и биты присутствия хранятся отдельно (на уровне классов, функций и т.д.)
я в указателях ABA-счетчик прячу :) 48бит на чистый укль, 16бит на ABA
грустно вам, наверное) https://en.wikipedia.org/wiki/Intel_5-level_paging
В зависимости от выравнивания к этому можно ещё немного бит добавить
ага, щас грустно стало.. вотцуки.. хорошо, что ассерты понатыканы.. ну, можно будет ABA сделать 8бит (коллизий побольше)
Ну это вручную разве что. Можно наверное накрутить proxy классы с интерфейсом optional которые будут хранить ссылку на значение и на бит (как в vector bool).
ну вручную у меня уже есть написанный класс а-ля "optional но без флага", но - я не уверен, что корректно реализовал лайфтайм объекта в стораже - в деструкторе придётся либо предполагать, что объект есть, либо что его нет, оба варианта хреновые :( пока что пришёл к выводу, что там, где мне нужен optional либо аналог, нетривиальные усилия по упаковке данных не уместны. но это пока что
Можно отдельно рассматривать trivially destructible и вообще не заморачиваться с lifetime же (это про uint64 из вопроса :)
Примерно из той же оперы, есть кодоген, для optional полей просто генерирую битовую маску и методы типа hasField/addField плюс паблик field, без заморочек с lifetime. Ну и с этими битиками уже работают сериалайзеры. Не очень удобно, но жить можно. Зато компактно :)
Обсуждают сегодня