__packed 属性在函数参数中的用途是什么

What is the use of __packed attribute in function arguments

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

我在 struct 声明中看到了 __packed 属性以避免填充。但是,在函数参数中使用 __packed 属性有什么好处。

author 说他已经用 __packed 告诉编译器整数可能没有对齐。这是什么意思?

编辑: 以下是否可以与 gcc 编译器一起工作

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

__packed 限定符是 ARM 发布的 armcc C 编译器的特定于编译器的功能。 A full explanation is present in their documentation,但简而言之,它表示不应将用于对齐的填充插入到限定对象中,并且应访问具有此限定符的指针,就好像它们可能未对齐一样。 (这可能会导致为某些处理器生成较慢的代码,因此不应随意使用。)

请注意,这 与 GCC packed 属性不同,后者仅适用于 structunion 类型定义。