Как выровнять (align) размер памяти на 4 байта?
Написал microsin   
01.03.2009

Выравнивать размер памяти нужно тогда, когда необходимо выделить буфер, чтобы в него точно уложилось целое количество групп байт.

Например, микроконтроллер оперирует 32-битными словами (4 байта), и может работать только с такой порцией данных (у меня так получилось с портом SSC на AT91SAM7X256 - передающий регистр SSC_THR имеет разрядность 32 бита, и порт SSC передает зараз 4 байта). Таким образом, для организации буфера передачи необходимо выделить такое количество байт, чтобы это количество нацело делилось на 4. Делается это очень просто, но неочевидным образом. Пусть length - минимальное невыровненное количество байт, которое требуется для данных. Тогда выравнивание на 4 достигается добавлением нужного количества байт по следующему алгоритму:
    length +=  3;       // добавляем 3 к length
    length &= ~3;       // сбрасываем 3 младших бита length

Последнее обновление ( 01.03.2009 )