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