__attribute__整数填充

时间:2015-04-18 15:19:57

标签: c compiler-warnings memory-alignment packing

<{>>在gcc documentation中,他们提供了有关整数如何对齐的信息。是否可以为打包整数做同样的事情?

例如,这是否在一个没有自动处理不正确对齐的数据的系统上有效?

typedef uint16_t __attribute__ ((packed)) packed_uint16_t;

在我的系统上,它给出了:

  

align.c:7:1:警告:'packed'属性被忽略[-Wattributes]

     

typedef uint16_t 属性((已包装))packed_uint16_t;

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

这是this question

的后续行动

1 个答案:

答案 0 :(得分:2)

__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 */