__packed属性在函数参数中的使用是什么意义?

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

我看到了在struct声明中使用__packed属性以避免填充。然而,在函数参数中使用__packed属性的好处是什么? author表示他已经使用__packed来告诉编译器整数可能不对齐。这是什么意思? 编辑:以下内容将适用于gcc编译器吗?
int readint(__attribute__((packed)) int *data)
{
    return *data;
}

2
重要的是要提到,这不是标准的C++,而是编译器特定的扩展。 - TNA
这种用法实际上是特定于ARM(事实上,是特定于特定的ARM C编译器)。我已经编辑了标签以反映这一点。 - user149341
@duskwuff 为什么这个问题只针对 arm,任何支持非对齐内存访问的处理器都可能出现这种情况。 - manav m-n
我将标签编辑为“armcc”;至少包括这个标签。特别是,其他系统中有像__packed这样的宏/扩展。坦率地说,这个问题涉及到armcc,这很好。我发现标签[arm]具有误导性,但你可以把它加回去。 - artless noise
1个回答

7
__packed限定符是由ARM发布的armcc C编译器的特定功能。在他们的文档中有详细解释,但简而言之,它表示不应该将任何填充插入到有资格的对象中以进行对齐,并且应该像可能未对齐一样访问具有此限定符的指针。(这可能会导致为某些处理器生成较慢的代码,因此不应该随意使用。)请注意,这与GCC的packed属性不同,后者仅适用于structunion类型定义。

我们还可以使用函数 get_unaligned()put_unaligned() 来进行未对齐的读写操作。 - manav m-n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接