Я пытаюсь понять принципы выравнивания машинного кода. У меня есть реализация на ассемблере, которая может генерировать машинный код во время выполнения. Я использую 16-байтовое выравнивание для каждой ветки назначения, но похоже, что это не оптимальный выбор, так как я заметил, что если я удаляю выравнивание, то иногда тот же код работает быстрее. Я думаю, что это как-то связано с шириной строки кеша, так что некоторые команды обрезаются строкой кеша, и из-за этого процессор останавливается. Так что если какие-то байты выравнивания вставлены в одно место, то инструкции переместятся куда-то дальше мимо границы кеша...
Я надеялся реализовать процедуру автоматического выравнивания, которая может обрабатывать код целиком и вставлять выравнивание в соответствии со спецификацией ЦП (ширина строки кэша, 32/64 бита и т. д.)...
Кто-нибудь может подсказать по поводу этой процедуры? Например, целевым ЦП может быть 64-разрядная платформа ЦП Intel Core i7.
Спасибо.