Я потратил несколько минут на повторное упорядочивание полей в структуре, чтобы уменьшить эффекты отступов [1], что слишком много похоже на несколько минут. Я чувствую, что мое время, вероятно, лучше потратить на составление Perl script или на то, что я не буду делать такую оптимизацию для меня.
Мой вопрос заключается в том, является ли это излишним; есть ли уже какой-то инструмент, о котором я не знаю, или какая-то функция компилятора, которую я должен включить [2], чтобы упаковать структуры?
Проблема еще сложнее из-за того, что она должна быть последовательно оптимизирована на нескольких разных архитектурах, поэтому любой инструмент, используемый для использования, должен также учитывать различные структуры и размеры указателей.
EDIT: быстрое уточнение - то, что я хочу сделать, - это переупорядочить поле в исходном коде, чтобы избежать заполнения, а не "упаковать" структуру, которая компилируется без заполнения.
РЕД. # 2: Еще одно осложнение: в зависимости от конфигурации могут изменяться и размеры некоторых типов данных. Очевидными являются указатели и указатели-diff для разных архитектур, но также типы с плавающей запятой (16, 32 или 64-бит в зависимости от "точности" ), контрольные суммы (8 или 16 бит в зависимости от "скорости" ) и некоторые другие неочевидные вещи.
[1] Рассматриваемая структура создается тысячи раз на встроенном устройстве, поэтому каждое 4-байтное сокращение структуры может означать разницу между ходом и отсутствием для этого проекта.
[2] Доступными компиляторами являются GCC 3. * и 4. *, Visual Studio, TCC, ARM ADS 1.2, RVCT 3. * и еще несколько неясных.