QUOTE (Twen @ Oct 26 2011, 11:03)

Возникает вопрос, есть ли еще какие-то плаформо-зависимые типы ?
char (должен быть не меньше восьми битов, больше - пожалйста. float и double могут быть по 32 бита. Короче - все базовые типы.
QUOTE (Twen @ Oct 26 2011, 11:03)

Если в командах ядрах есть доспуп к любой ячейки памяти, то зачем тогда выравнивать вообще?
Не во всех архитектурах невыровненый доступ дается бесплатно. Разве что на 8-битках. Но поробуйте организовать такую структуру - и получите те же проблемы на AVR:
CODE
struct test
{
uint8_t a:6;
uint8_t b:4;
uint8_t c:6;
}
Обратитесь к элементу b этой структуры и почувствуете в листинге примерно то же, что многоразрядные процессоры чувствуют при невыровненном доступе.
Кое-где он может занимать больше времени (потому что все "волшебство" спрятано внутри ядра), где-то компилятор будет вынужден считывать каждую невыровненную переменную побайтно и в регистрах из нескольких байтов собирать одно большое число. Ну представьте себе, что у вас память снаружи и соединена 16-битной шиной. И если переменная не ложится ровно на шину данных - то процессору в любом случае придется делать несколько обращений, выбирая разные адресные входы.
QUOTE (Twen @ Oct 26 2011, 11:03)

Если процессор может понять, что структура была упакована, то почему компилятор сам не пакует так данные размещенные у RAM?
Вы можете заставить компилятор работать с со всеми структурами в упакорванном виде, но это будет такой стоп-кран, что лучше пожертвовать немного ОЗУ, только пусть он разложит данные так, как ему удобно. Он же тоже не дурак, и выделять по 4 байта на каждую вашу переменную не будет.
Доверьтесь ему, и используйте пакованные структуры только там, где это действительно нужно - при обмене с внешним миром.