精彩牛耳,用心缔造

论c语言的竞争优势

作者: 编辑: 来源: 发布日期: 2019.07.09
信息摘要:
没有什么技术可以应用长达50年之久,除非它真的比大多数其他东西都要好用——对于一种计算机行业的技术来说尤其如此。自1972年诞生以来,C语言…

没有什么技术可以应用长达50年之久,除非它真的比大多数其他东西都要好用——对于一种计算机行业的技术来说尤其如此。自1972年诞生以来,C语言一直保持生龙活虎的状态,时至今日它仍然是我们用来搭建软件世界的基础建筑材料之一。

但有时一种技术能够长期存在,只是因为人们还没有来得及发明新的东西来取代它而已。在过去的几十年里,出现了许多其他语言——其中一些明确地被设计用于挑战C的主导地位,有些语言试图凭借自己的人气慢慢瓦解C语言的统治地位。

为C需要被替换掉的观点争辩是简单的。编程语言研究和软件开发实践都暗示了如何比C更好地去做事。但历经数十年的研究和开发,C语言的地位却依旧稳固。很少有其他语言能够在性能、裸机兼容性或通用性等方面击败它。不过,2018年C是如何与那些明星编程语言竞争的呢,其中细节仍值得一看。

选C而不选C++对您——以及任何将会维护你代码的开发人员——来说都是可行的,通过采用强制简约主义来避免与C ++的复杂性纠缠。当然,C ++拥有丰富的高级功能,这是有它自己的道理的。但如果极简主义更适合当前和未来的项目——以及负责项目的团队——那么还是选C更明智一些。

Java输给C的地方是一个Java从未打算竞争的领域:靠近底层结构运行,或直接与硬件打交道。C代码被编译成机器代码,由进程直接执行。Java被编译成字节码,这是一种随后会被JVM解释器转换为机器代码的中间代码。此外,尽管Java的自动内存管理在大多数情况下都是个优点,但C更适合于必须充分利用有限内存资源的情况。

也就是说,在某些方面,Java在速度方面可以接近于C。JVM的JIT引擎在运行时根据程序行为优化例程,允许进行许多类型的优化,而这些优化是在未提前编译的C中无法实现的。虽然Java运行时自动执行内存管理,但一些较新的应用程序可以解决这个问题。例如,Apache Spark部分地通过使用绕过JVM的自定义内存管理代码来优化内存中处理。

与C一样,C#和.Net提供各种直接访问内存的机制。堆,栈和非托管系统内存都可以通过.Net API和对象访问。开发人员可以使用.Net中的unsafe模式来实现更高的性能。

但这些都不是没有代价的。托管对象和unsafe对象不能被任意交换,并且它们之间的编组会降低性能。因此,要最大化.Net应用程序的性能需要将托管和非托管对象之间的变动保持在最低限度。

如果您无法承担托管与非托管内存之间变动造成的性能损失,或者.Net运行时对于目标环境(例如,内核空间)来说是一个糟糕的选择,或者可能根本不可用,那么C就是你所需要的。与C#和.Net不同,C被默认可以解锁对内存的访问权。

牛耳推荐资讯
IT学子们请像高考冲刺那样,圆我们的IT梦

IT学子们请像高考冲刺那样,圆我们的IT梦

还记得当年高考前教室后面的标语吗?还记得模拟考成绩出来后的悲与欢吗?还记得那最后100天我们内心的充实吗?然而随着大学生活的流式,那些埋藏在我们内心深处的美好记忆也随之消逝。各位IT专业的学子们,你们是否也是满怀期待的选择计算机专业,是否也是因为学电脑很有前途,因为现在IT行业发展火爆?确实T行业需要......
2020-01-06
长沙IT培训---计算机系实习的我们该何去何从

长沙IT培训---计算机系实习的我们该何去何从

又是一年实习季,到了这个时候就想起了当年的小编自己,没有其他词语比迷茫着两个字更加能代表自己的心情了。随着互联网经济的不断发展,IT技术也随之不断的更新、更迭,IT行业俨然成为了21世纪最火的行业之一。但是不是学计算机的人又哪懂我们计算机系的苦呢?从入学到毕业我们大大小小有七八个方向可以选择,有时候......
2020-01-06
长沙IT培训---其实转行就那么简单

长沙IT培训---其实转行就那么简单

最近我看到了一篇文章,文章的内容是关于华为公司大规模裁员的,大概的意是说,华为公司宁愿冒着赔偿10亿的风险,也要开除公司内部的7000多名“闲职”人员。看了这篇文章之后,我的感受颇深,文章有一句话很犀利:“时代抛弃你,从来都不会打招呼”,我觉得我需要正视下自己了,觉得必须要保持持续学习的习惯,否则说......
2020-01-06

咨询热线

400-0731-162
  
    • *

    • *