1234567891011121314151617181920212223242526272829303132333435363738 |
- <chapter xml:id="packon.h">
- <title><tt>__vic/packon.h</tt> & <tt>__vic/packoff.h</tt></title>
- <p>Включение первого файла отключает выравнивание полей структур. Другими
- словами, включает «упаковку структур» - размер структуры - это строго сумма
- размеров его полей. Включение второго файла восстанавливает выравнивание,
- используемое по умолчанию. Таким образом, пара директив <tt>#include</tt>
- формируют секцию исходного файла с отключенным выравниванием сруктур.</p>
- <note>Каждый <tt>#include<__vic/packon.h></tt> должен иметь соответсвующий
- <tt>#include<__vic/packoff.h></tt>.</note>
- <section><title>Пример</title>
- <code-block lang="C++"><![CDATA[
- struct unpacked
- {
- bool f1;
- int f2;
- };
- static_assert(sizeof(unpacked) >= sizeof(bool) + sizeof(int),
- "Total struct size can exceed the sum of members sizes");
- #include<__vic/packon.h> // выравнивание отключено, начиная отсюда
- struct packed
- {
- bool f1;
- int f2;
- };
- static_assert(sizeof(packed) == sizeof(bool) + sizeof(int),
- "Total struct size is exactly the sum of members sizes");
- #include<__vic/packoff.h> // выравнивание снова включено
- ]]></code-block>
- </section>
- </chapter>
|