gpt4 book ai didi

c - __attribute__ 由一个整数组成

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:52 24 4
gpt4 key购买 nike

gcc documentation它们提供有关整数如何对齐的信息。 打包整数可以做同样的事情吗?

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com