免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: zx_wing
打印 上一主题 下一主题

char[0], sizeof和struct padding [复制链接]

论坛徽章:
0
61 [报告]
发表于 2009-05-19 10:26 |只看该作者
不会用,应该搞清楚该怎么用。
而不是,用一种愚蠢的方法解决,误导大家。

论坛徽章:
0
62 [报告]
发表于 2009-05-19 13:48 |只看该作者
原帖由 zx_wing 于 2009-5-17 00:26 发表
我想举一个自己最近在项目中犯的错误来说明要踏踏实实做人,不要做装B青年
在代码中,我需要在一个library和一个daemon之间通过socket传送数据包,包的格式定义如下(为了简化,我就用最简单的数据类型举例 ...


涉及到[0],网络数据交换,一般都需要__attribute__((packed)).

论坛徽章:
0
63 [报告]
发表于 2009-05-19 13:59 |只看该作者
  
很naive的一个错误啊  有必要花我这么长时间去看一堆乱七八糟的讨论  
少点争论,有事说事
我还以为有什么高深的技术含量咧
真是个装13问题

论坛徽章:
0
64 [报告]
发表于 2009-05-19 14:01 |只看该作者
原帖由 eexplorer 于 2009-5-19 13:48 发表


涉及到[0],网络数据交换,一般都需要__attribute__((packed)).

>>__attribute__((packed))
是的,这个是应该的

论坛徽章:
0
65 [报告]
发表于 2009-05-19 14:02 |只看该作者
原帖由 landylau_ren 于 2009-5-19 13:59 发表
  
很naive的一个错误啊  有必要花我这么长时间去看一堆乱七八糟的讨论  
少点争论,有事说事
我还以为有什么高深的技术含量咧
真是个装13问题

哈哈,错误是很naive。
光看个sizeof != offsetof确实也没什么技术含量

论坛徽章:
0
66 [报告]
发表于 2009-05-19 15:13 |只看该作者
在网络数据传输的情况我一般使用 #pragma pack(1) ... #pragma pack(), 也挺省事的。
============================
我用的就是这种方法,楼主是什么方法解决的

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
67 [报告]
发表于 2009-05-19 16:23 |只看该作者
原帖由 erwin1984 于 2009-5-19 10:25 发表
在网络数据传输的情况我一般使用 #pragma pack(1) ... #pragma pack(), 也挺省事的。


使用#pragma pack或者 __attribute__((packed))是解决了padding问题。
但是会不会导致新的,未对齐数据访问的问题?

论坛徽章:
0
68 [报告]
发表于 2009-05-19 16:27 |只看该作者
原帖由 OwnWaterloo 于 2009-5-19 16:23 发表


使用#pragma pack或者 __attribute__((packed))是解决了padding问题。
但是会不会导致新的,未对齐数据访问的问题?

在代码中避免使用类似:
*(int*)&a_struct->member = xxx;
的方式,使用memcpy

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
69 [报告]
发表于 2009-05-19 16:31 |只看该作者

回复 #68 zx_wing 的帖子

ok, 又是效率问题了 ……

其实并不是使用memcpy的时候, 而是在写下 packed 的时候, 效率问题就挥之不去了 ……
解决方法还是像楼主所说的那样 ……
一开始就“踏踏实实”写代码~~~  尽可能少玩"花招"~~~

[ 本帖最后由 OwnWaterloo 于 2009-5-19 16:36 编辑 ]

论坛徽章:
0
70 [报告]
发表于 2009-05-20 08:04 |只看该作者
mark一下,提醒自己
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP