[开源]DirectStruct - C结构体工具 更新至v1.0.4
9月13日#成都#源创会,Swift、Docker、云计算、大数据!
ver 1.0.4 2014-09-09 calvin
* 修正了AIX上的编译问题
* 修正了浮点数的字节序问题
* 优化了自动生成代码的布局
* 自动生成代码前的工具版本信息
DirectStruct是一个C结构体工具,命令行工具dsc读入IDL定义文件,自动生成C结构体定义及常用函数代码,在应用中直接使用自动化代码以提高开发效率,避免开发冗余和编码风险。
DirectStruct生成了哪些自动化代码?
* C结构体定义
* 批量初始化缺省值函数
* 网络/主机字节序化函数
* 序列化/反序列化函数(可带压缩)
* 打印结构体内所有字段值函数
还将支持XML、JSON、定长报文、分隔符报文的序列化/反序列化等,敬请期待
用DirectStruct自动生成的代码能干什么?
* 直接C结构体通讯交换 : 在特定平台之间直接把C结构体变量通过TCP扔给对方是一个很诱人的想法,阻碍我们的主要是整型字段的字节序问题,手工编码是一件冗余的事情,DirectStruct可以帮助你自动化这一过程。解决了字节序问题后就可以直接交换报文,避免了通讯发送前的打包和通讯接收后的解包,所以速度非常快,是某些追求极端性能的场景中的首选报文格式。
* 结构体序列化/反序列化 : 在跨平台中涉及到字段对齐情况就不适合直接扔TCP了,别烦恼,使用DirectStruct生成的序列化/反序列化函数吧,虽然多了打包解包,但是经过精心设计和算法优化,性能也是很诱人的。如果启用了压缩选项,压缩后的二进制数据块大幅缩小,便于通讯交换。
* 快速打印结构体内所有字段值 : 对于一个大结构,编写他的打印所有字段值的函数是一件很无聊的事情,你可以用DirectStruct帮助你自动生成日志函数,输出到屏幕,或你自己的日志流中。
* ( 新主意增加中 ... 把你的需求告诉我吧 )
为什么使用DirectStruct?
* 灵活的报文定义语法 : 命令行工具dsc读入定义文件,生成自动化代码,支持子结构嵌套、子结构数组、定义文件包含等灵活配置方式。
* 跨平台:DirectStruct支持WINDOWS、Linux、AIX等主流操作系统,尤其是多平台中不同的表达方法,如64位整型,相同的IDL定义文件将生成不同平台的标准。
压测:
* DirectStruct序列化(带压缩)后的报文大小66字节,而Google Protocol Buffer为72字节,DirectStruct在序列化和压缩报文大小上险胜。
* DirectStruct反复序列化/反序列化(带压缩)1000万次总耗时1.080s,而Google Protocol Buffer总耗时4.248s,DirectStruct在序列化性能上完胜。
* DirectStruct编译客户应用代码时不需要额外的头文件和库文件,只需要工具dsc生成的IDL_AllTypes2.dsc.c、IDL_AllTypes2.dsc.h即可,而Google Protocol Buffer不仅需要PressProtobuf.pb.cc、PressProtobuf.pb.h,还需要/usr/local/include/google/protobuf下的一大堆头文件以及/usr/local/lib/libprotobuf.a(9MB),还依赖于-lpthread,编译环境复杂。