Для современных процессоров выравнивание данных бессмысленно.
Вплоть до появления Pentium Pro, процессоры крайне болезненно относитесь к не выровненным переходам и вызовам функций, чей адрес не был кратен 4 байтам, и давали за это штрафные такты (называемые "пенальти"), что объяснялось несовершенством микропроцессорной архитектуры тех лет.
Начиная с Pentium II+ и AMD K6+ процессоры уже не требуют постоянного выравнивания переходов/вызова функций, исключая тот случай, когда целевая инструкция или команда перехода пересекает границу линейки кэш-памяти первого уровня, "расщеплялась" напополам, за что выдается пенальти, причем Pentium 4, компилирующий x86-инструкции в микрокод, выдает его значительно реже и совершенно непредсказуемым образом - микроинструкции абсолютно недокументированны, их длина неизвестна, следовательно, управлять их выравниванием мы не можем.
Несмотря на то, что Pentium 4 де-факто является самым популярным процессором и непоколебимым лидером рынка, большинство компиляторов упорно продолжают заниматься выравниванием, располагая инструкции перехода по кратным адресам и заполняя образующиеся "дыры" незначащими инструкциями, такими как NOP, MOV EAX, EAX и др. Естественно, это увеличивает размер кода, снижая его производительность и агрессивное выравнивание только вредит.
Компилятор Intel C++ вообще не выравнивает ни переходов, ни циклов, что является лучшей стратегией для Pentium 4, а вот на более ранних процессорах мы получаем неустойчивый код с "плавающей" производительностью, быстродействие которого зависит от того, расщепляются ли глубоко вложенные переходы или нет. А это в свою очередь зависит от множества трудно прогнозируемых обстоятельств, включая фазу луны и количество осадков.