Хех, да, у каждого байта есть адрес, поэтому вы не можете использовать меньше одного.
На самом деле немного сложнее использовать менее 4 или 8, потому что доступ к невыровненным скалярам медленный, и поэтому языковые процессоры склонны выравнивать адресуемые объекты с кратными 4, 8 или даже 16, когда дело касается блоков кеша. Фактическая шина данных, скорее всего, равна ширине регистра, поэтому, если объект не выровнен (32 или 64 бита, как правило), тогда на самом деле два объекта должны быть пойманы и объединены процессором. Это медленно и поэтому компилятор защищает от этого.
Иногда добавляется еще больше выравнивания.
Как правило, объявление отдельного объекта получит выравнивание в 4 или 8 байтов, но функция, модуль (входной файл компоновщика) или другой большой объект может получить 16 или 32, потому что использование блока частичного кэша приводит к потере неиспользуемый раздел блока кеша, и производительность кеша сегодня критична.