Java代码转C代码经验

36 篇文章 0 订阅
15 篇文章 0 订阅

最近在做一些分词模型,我在网络上参加了一些开源讨人论坛的讨论并下载相关的源代码,那些源代码要不就是JAVA就C#,速度感觉不是很快!在基本理解的情况下,我打算将其代码转化为C代码,以提高其速度。
里面一些要进行字符处理,感觉JAVA太上层,有点不好掌控。C语言自由度大,易于操作和处理。
我首先针对JAVA中的BEAN包进行了C语言改写,在进行改写的时候,感觉C虽然速度快,但是处理很烦琐,比如像Java中一个类ArrayList,如果里面装不同的对象的话,我就得为其重新写一些重复的代码,比如ArrayList<SegNode>实例和ArrayList<int>实例,这两个实例本来在C++用一个STL就能搞定,但是到了C语言下,就无能为力了。
为此我在GOOGLE上,搜索了相关的C语言的模板文章,并在一个负责编写gLib的网站了,找到相应的实现方法,就是用一些宏进行处理,
比如:
#define ArrayList(name, type, iLen, blFlag)  //name为变量名,type为变量的类型,iLen表示申请的空间大小 /
{/
   .../
}
这种方法在一定的程序上可以实现模板的功能但是,由于宏不能进行类型检查,所以必须使用者十分熟悉这些原理和代码才能进行很好的调用,使用这个方法还有一个不好的地方就是,由于宏是替代的,如果用多了话,就会出现代码膨胀,另外用宏来编写代码,很不容易进行调试。
如果要解决安全调用这些类似模板的宏,你可以在这之上编写相关的函数,比如
针对ArrayList(name,type,iLen)宏, 可以根据不同的类型编写相应的函数
Bool SegNode_ArrayList_Construstor(SegNode *ptSn, int iLen) //
{
    Bool blFlag = false;
    ArrayList(*ptSn, SegNode, iLen, blFlag); //invoke the macro
    return blFlag;
}
...//
但是又好像失去了模板的功用,但是由于在定义不能的类型的相关的构造函数和析构函数的时候,都调用同一个
宏,相对来说,作者的编码工作量是减少了。但是对于使用者来说又多了许多没有必要的函数名字。
看来在代码的易用和重用这两个方面是此消彼长的关系。
还有在针对对象进行C语言改写时,应该遵循以下几个方面的原则:
1、C语言函数输出变量尽量放到输出参数中,返回值应返回函数错误类型
2、针对某个对象进行编程时,应该将对象名字作为其前缀+_函数名字
3、函数模块应遵循:
{
    int i;                           //1. var declarations
    ...
    assert(..);                //2. assertions.
    if (..)                         //3. check params
    {... }
    i = 0;                          //4. initializing....
    Obj_Constructor(); // 5. constructors
   ....                                //6.body of func.
  Obj_Destructor();     //7.destructors
  return (...)                  //8.returns
}
8个基本步骤,这样,基本上不会出现什么内存溢出的问题。
呵呵,,,如果有什么不足的地方请版上的高手指点指点。

<script type="text/javascript"> </script> <script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值