__attribute__ 由一个整数组成

__attribute__ packed of an integer

gcc documentation 中,他们提供了有关整数如何 对齐 的信息。 packing 整数可以做同样的事情吗?

例如,这在不会自动处理不正确对齐数据的系统上有效吗?

typedef uint16_t __attribute__ ((packed)) packed_uint16_t;

在我的系统上它给出:

align.c:7:1: warning: ‘packed’ attribute ignored [-Wattributes]

typedef uint16_t attribute ((packed)) packed_uint16_t;

但是我的系统正确地处理了未对齐的字节,所以我猜它会忽略它!

这是 this question

的跟进

__attribute__((packed)) 仅适用于结构。它指定在结构成员之间或之后不应有填充。编译器仍然假定结构本身已正确对齐,但它可能会生成特殊代码来访问未对齐的结构成员。

如果您有一个未对齐的指针(我不确定您是如何得到这样一个指针的)并且您想要以可移植的方式取消引用它,请考虑这样做:

some_type *mptr;                     /* misaligned pointer */
char *buffer = malloc(sizeof *mptr); /* get some aligned memory */
memcpy(buffer, mptr, sizeof *mptr);
some_type *aptr = (some_type*)mptr;  /* pointer to aligned data */