sizeof的问题

发布于 2022-10-15 09:07:08 字数 260 浏览 23 评论 0

本帖最后由 sunguangshou 于 2011-04-19 22:21 编辑

struct w1{char ch[1];}

w1 w11;

sizeof(w11)的值应该不论在什么系统下都为1吧。

还是跟机器有关呢?

我认为这个char数组,给机器没有关系。

各位大侠怎么看呢?

谢谢

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

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

发布评论

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

评论(9

在风中等你 2022-10-22 09:07:08

本帖最后由 nketc 于 2011-04-19 22:28 编辑

编译器会有一些填充数据,32位机器上上面的结果是4.
不过你可以强制编译器不填充。
gcc是 __pack
============================
谢谢 三月廿七 指正,请往下看。 上面说是4 其实是错误的。

无法回应 2022-10-22 09:07:08

填充是为了地址对齐,提高访问效率。

仅此而已 2022-10-22 09:07:08

本帖最后由 sunguangshou 于 2011-04-19 22:16 编辑

回复 3# nketc

稍稍有一点明白,谢谢高手。
也就是说和机器和操作系统有关联了。
我这么说对吗?

余生共白头 2022-10-22 09:07:08

编译器会有一些填充数据,32位机器上上面的结果是4.
不过你可以强制编译器不填充。
gcc是 __pack
nketc 发表于 2011-04-19 22:11

你试了没有啊, ?

剧终人散尽 2022-10-22 09:07:08

你试了没有啊, ?
三月廿七 发表于 2011-04-19 22:16

大侠,希望你给个再精辟的答案吧。

当梦初醒 2022-10-22 09:07:08

回复  nketc

稍稍有一点明白,谢谢高手。
也就是说和机器和操作系统有关联了。
我这么说对吗?
sunguangshou 发表于 2011-04-19 22:15

他在乱说, 答案就是1

睫毛上残留的泪 2022-10-22 09:07:08

回复 5# 三月廿七

  1. thinkpad@laptop:~/workspace$ cat ccc.c
  2. #include <stdio.h>
  3. struct w1{char ch[1];}__attribute__ ((packed));
  4. int main (int argc, char *argv[])
  5. {
  6.   struct w1 w11;
  7.   
  8.   printf("%d\n", sizeof (w11));
  9.   return 0;
  10. }
  11. thinkpad@laptop:~/workspace$ gcc ccc.c
  12. thinkpad@laptop:~/workspace$ ./a.out
  13. 1
  14. thinkpad@laptop:~/workspace$

复制代码

薄情伤 2022-10-22 09:07:08

回复 7# 三月廿七

    对不起,我错了。

憧憬巴黎街头的黎明 2022-10-22 09:07:08

本帖最后由 三月廿七 于 2011-04-19 22:26 编辑

回复  三月廿七
nketc 发表于 2011-04-19 22:20

没关系...

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