Attribute [[pack]] для разрешения сжатия путём изменения порядка переменных

zamazan4ik@tut.by
zamazan4ik@tut.by

Основная ссылка и обсуждение:

https://groups.google.com/a/isocpp.org/forum/?fromgroups=#!searchin/std-proposals/reorder/std-proposals/sjeBBZduXVc/C5nlKLRKOH0J

 

Основная идея: ввести атрибут в Стандарт, который будет разрешать переупорядочивать местами переменные в структурах.

Для чего нужно переупорядочивание: снижение размера структуры, рандомизация порядка (пример из ядра Линукс). Если у Вас есть идеи, где это ещё может пригодиться, пишите в комментах. Я пока что фокусируюсь только на снижении размера структуры (что уже есть в Rust)

Крайне рекомендую ознакомиться с изначальным обсуждением в гуглогруппе.

1
рейтинг
1 комментарий
Andrey Davydov
Я читал дискуссию по ссылке, возможно, недостаточно внимательно, но не увидел там ответов на следующие вопросы.
1. Как можно сделать атрибутом то, что компилятор явно проигнорировать не может (как минимум потому что должен поменяться результат вычисления std::is_standard_layout_v)?Кажется, надо действовать по аналогии с alignment specifier.
2. Почему бы, если уж вводить в стандарт понятие packing'а, то не начать с того, что де факто уже есть во всех компиляторах -- простого packing'а в том смысле как его сейчас понимают GCC, Clang, MSVC -- а не оптимизированного с переупорядочиванием полей? Мотивация для этого -- использовать #pragma pack жутко неудобно, забытый #pragma pack(pop) в header'е ведет к тому что едет layout у всех классов и программа начинает падать в runtime где-нибудь в недрах скомпилированной 3rdparty библиотеки (скажем Qt), отлаживать подобное -- удовольствие ниже среднего.
Andrey Davydov
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).