Потому что отдельные переменные должны быть выровнены. В предложенной формуле вы выровняете только первую переменную в стеке, оставив следующие переменные невыровненными, что отрицательно сказывается на производительности.
Это также известно как «упаковка» и может быть сделано в C / C ++ с прагмами, но полезно только в очень специфических случаях и может быть опасным как для производительности, так и как причина потенциальных ловушек во время выполнения. Некоторые процессоры будут генерировать сбои при невыровненных доступах во время выполнения, что приведет к сбою вашей программы.