为什么不用c语言开发,浅谈为什么用C语言开发引擎

首先什么是引擎?

引擎,百度一下比我讲的要严密很多,所以我就用通俗的话来描述一下吧。引擎,就是一切API(application programming interface)的封装。如果是游戏引擎,那么游戏引擎就封装了很多图形处理的函数。例如你要画圆(cycle),你只要使用函数cycle函数就可以了。当然引擎是很庞大的,没有想象的那么简单。里面包括了:声音、图像、网络的数据流,大量算法,针对硬件的编程和优化等等等。(这个我说的不严密,只是给你一个大致的概念)包含有很多各种各样的库,而库的工作是独立完成自己的任务,引擎的工作是管理各个库之间的联系。你可以想象一下一个online game,至少有人物、npc、地图、怪物。那么其中他们自己就是独立库。引擎就是要他们高效、准确的去共同完成一个工作。

以上是我个人的解释,当然很多是不准确的,大家只要拿走对自己有用的部分就可以了。

为什么说C用来做引擎是很好的?

1、C语言全部内存要自己处理

对于很多新手来说一个链表已经搞得很头疼了,指针指来指去,运行的时候和自己的预期效果相差甚远。分不清那些是系统管理的内存,那些是必须要自己去释放的。这时候很多人就会觉得面向对象的语言多好啊。New完以后也不用管的,赋值null或者函数结束就会被回收,不会造成内存泄漏问题。如果在C里面你这样做内存就会泄漏了,长时间运行就会奔溃。

Void* p = malloc( (100);

p = malloc(50);

那么前面的100个字节就永远找不到了,如果不断运行,接着又会丢失100个字节,一段时间过后就会因内存不足程序崩溃了。

我们编程很多时候都会运用到缓存技术,这就会涉及到很多的申请空间,释放空间的操作,使内存存在很多的碎片(不连续的内存空间),让程序无法申请到新的内存,当然这个是大内存时代,8G,16G,32G等更大更大。电脑不用考虑内存问题,但是移动设备呢?手机呢?智能家居呢?前两年的手机还是256m的内存,运行多少个系统软件,还要满足用户的N个APP共同运行。安卓能够运行,而安卓基于linux,linux由C语言开发。

2、内存的直接控制。

例如你要申请两个内存,p1 = malloc(100);p2=malloc(100);

实时在C里面可以这样做 p1 = malloc(200); p2 = p1+100;这样只需要和操作系统申请一次,而且空间还是连续的。当然为了程序可阅读性强没有必要这么做。最有说服力的就是这一句话“给我一个起始内存地址,我可以创造一个世界。”这句话来自《windows游戏编程大师技巧》,也就是说一个屏幕的显示起始地址,我就可以在上面写任何图形来组成一个世界。可见C直接控制内存有多重要。

3、直接控制位

例如有一个flag(描述符)来描述一只鸭,鸭的飞、跳等特性可以用一个int来表示。

#define FLY 0x00000001 (其实就是1)

#define JUMP 0x00000010 (其实就是2)

Int flag = FLY;(表示可以飞)

Int flag = JUMP;(表示可以跳)

那么如何表示可以跳 而且可以飞 呢?

Int flag = FLY|JUMP   (0x00000011其实就是 3)

那么我们分析的时候

If(flag& FLY) { (飞操作)}

If(flag& JUMP) { (跳操作)}

这样就可以取得你想要的那个标志位,当然这个方法flag是有限个描述的char 是8  int 是32 longint是 64。

如果你写过C的sdk你就知道有很多mask 或者 flag 很多都用到了。

那么C和引擎的关系呢。

C语言何以内嵌汇编代码,可以针对硬件来编程。直接用的指令来提高执行速度。(SIMD)单指令多数据,等特殊的处理方式。而且硬件通常以位来计算,而C语言提取位是非常的方便的。直接发挥硬件的全部功能。写驱动是非常高效的。编写部分与硬件相关的函数。利用函数(API)来封装好,变成了引擎的基本函数库。这样一个基本库就出来了。然后根据规划好的数据结构,数据流做进一步的实现,封装,这样就成了模块。

网络游戏来说就分了:精灵模块,渲染模块,网络模块,AI模块。而它们之间是怎么运作的呢?这就要看这个引擎的设计思想了,也就是我们平常所说的机制。如windows消息机制。用什么样的方式来运作。引擎就是规划好这些东西,然后程序员看开发手册就知道这个引擎到底有什么功能了。引擎的效率与稳定性决定了别人是否认同。所以高效的底层算法,健壮的机制必不可少,C语言就具有这样的一个特性,对于底层的控制十分强。

我觉得如果你在学C语言,继续学C语言。如果你是新手,建议直接学面向对象语言C++等。

因为现在C语言已经慢慢的没落了,即使仍然有很多地方还是要用到C语言,如单片机、串口通信、驱动。即使它没落,还是很多高校把他作为入门语言。所以我建议大一大二还是用它吧,把它练熟了,考试高分飘过,再学面向对象已经没有什么难度了。提取它的精华,运用到面向对象里面去。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值