精彩牛耳,用心缔造

论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被默认可以解锁对内存的访问权。

牛耳推荐资讯
听说Java工程师的薪资高,没有英语基础能学Java吗?

听说Java工程师的薪资高,没有英语基础能学Java吗?

Java的各种代码都是由英语字母组成的,这让很多不熟悉英语的人会担心自己学不会,从而放弃学习Java的想法。今天牛耳君就给大家分析下Java培训是否需要英语基础吗?Java语言虽然代码都是英文的,但是并不代表只有英语好的人才能学会Java,因为Java编程常用的口令代码就那些,只要将这些常用的口令代码背熟就可以编写程......
2019-10-24
Java培训之学无止境

Java培训之学无止境

培训完java基础,对java面向对象的思想有更加深刻的认识了,从学习java语言概述到目前学习的集合,回首感觉快又感觉漫长,学的东西确实挺多的,很多知识也感觉比较抽象,特别是第一条三大特性(封装,继承,多态),第二条关键字。学完面向对象就学习集合。我感到很幸运,遇到一个好老师,就是我们的牛耳的老司机全老......
2019-10-24
Java培训--只要改变,任何时候都不晚

Java培训--只要改变,任何时候都不晚

做什么事情,只要改变,任何时候都不晚,大家好我是来自牛耳Java培训班的一名学员,在来牛耳之前我是一名普通的电话销售人员,每个月拿着4000多的工资,在上家公司工作了2年收获了人生的第一桶金,在工作中学到了很多东西包括,5W1Hd的高效管理办法,SMART管理原则等一些经验,和与人的沟通经验还是非常感谢,上家公司对我的培养......
2019-10-24

咨询热线

400-0731-162
  
    • *

    • *