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