关于字节对齐的问题

发布于 2022-07-22 22:12:39 字数 427 浏览 6 评论 8

typedef struct
{
        unsigned char first;
        unsigned char len;
        unsigned char cmd;
        unsigned char seq[2];
} ctl_head_t;
我希望它占5个字节,可以实际却是8个字节。
编译器:arm-elf-gcc
             2.95.3
该如何办?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

长发绾君心 2022-07-26 16:15:28

原帖由 Jobs.AE@ 于 2006-8-17 10:05 发表

只是有时候编译器不支持这个而已,并非无用!
你用标准gcc试试,肯定有效的!

__attribute__((packed))基本上大多数gcc都支持,即使是精简的嵌入式编译环境也可以。

至于楼上有一位谈到了为什么要用这 ...

标准的gcc当然是支持的,我想我应该下载一个比较新的编译器,我的版本太低了

那片花海 2022-07-26 16:15:20

原帖由 cjaizss 于 2006-8-17 09:02 发表

没办法,我也不想如此,实属无奈...
#prama pack之流,编译出来还是4字节对齐...

只是有时候编译器不支持这个而已,并非无用!
你用标准gcc试试,肯定有效的!

__attribute__((packed))基本上大多数gcc都支持,即使是精简的嵌入式编译环境也可以。

至于楼上有一位谈到了为什么要用这种缺乏移植性的小技巧,我想实际工作当中什么样的情况都可能碰到,做嵌入式有时候是要牺牲移植性的,至于原因就多种多样了。但有一条,并非我们不知道这样做移植性不好。

:em11:

[ 本帖最后由 Jobs.AE@ 于 2006-8-17 10:09 编辑 ]

单身狗的梦 2022-07-26 16:00:20

我记得只这个就可以
__attribute__ ((aligned(pack)))

如若梦似彩虹 2022-07-26 15:42:43

原帖由 connet 于 2006-8-17 08:15 发表
为什么都想搞这种没有移植性的小技巧?

没办法,我也不想如此,实属无奈...
#prama pack之流,编译出来还是4字节对齐...

花辞树 2022-07-25 01:14:20

为什么都想搞这种没有移植性的小技巧?

她比我温柔 2022-07-24 23:56:55

搞定了,thanks
每个结构都加上__attribute__ ((aligned(pack)))
然后编译指定-fpack-struct参数

[ 本帖最后由 cjaizss 于 2006-8-16 19:56 编辑 ]

甲如呢乙后呢 2022-07-24 16:38:21

我都试过了,除了最后一种(我只需要这一个结构按照1字节对齐),但是还是不行...

疯了 2022-07-23 08:07:02
  1. typedef struct
  2. {
  3.         unsigned char first;
  4.         unsigned char len;
  5.         unsigned char cmd;
  6.         unsigned char seq[2];
  7. } ctl_head_t __attribute__((packed));

复制代码

或者:

  1. #prama pack(1)
  2. typedef struct
  3. {
  4.         unsigned char first;
  5.         unsigned char len;
  6.         unsigned char cmd;
  7.         unsigned char seq[2];
  8. } ctl_head_t;

复制代码

又或者:

  1. gcc XXXXX -fpck-struct XXXXX

复制代码

:em11:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文