gcc documentation中,它们提供有关整数如何对齐的信息包装整数也可以做同样的事情吗?
例如,在不自动处理不正确对齐的数据的系统上,这是否有效?

typedef uint16_t __attribute__ ((packed)) packed_uint16_t;

在我的系统上它给出:
align.c:7:1:警告:忽略“packed”属性[-Wattributes]
typedef uint16属性((packed))packed;
但我的系统能正确处理未对齐的字节,所以我想它会忽略它!
这是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 */

关于c - __attribute__打包为整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29719199/

10-11 16:47