Как использовать атрибут __packed в аргументах функции

int readint(__packed int *data)
{
    return *data;
}

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

Автор говорит, что он использовал __packed сообщить компилятору, что целое число может быть не выровнено. Что это значит?

Изменить: Будет ли следующая работа с gcc компилятор

int readint(__attribute__((packed)) int *data)
{
    return *data;
}

1 ответ

Решение

__packed квалификатор является специфичной для компилятора функцией armcc Компилятор C, изданный ARM. Полное объяснение представлено в их документации, но вкратце, оно указывает, что в квалифицированный объект не следует вставлять отступы для выравнивания и что указатели с этим классификатором должны быть доступны так, как если бы они могли быть выровнены. (Это может привести к генерированию более медленного кода для некоторых процессоров, поэтому его не следует использовать безвозмездно.)

Обратите внимание, что это не то же самое, что GCC packed атрибут, который применяется только к struct а также union определения типов.

Другие вопросы по тегам