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