初入门的我们经常听见别人说“真正的程序员用C语言编程,C是最快的语言因为它是最靠近及其底层的语言。”那么和其他语言相比C语言到底有什么特别的呢?

C语言没有什么特别,这就是它快速的秘诀。

新的语言支持更多的特性,比如,垃圾回收(garbage collection),动态类型(dynamic typing)等等。这些新加入的特性让出学者们更容易上手。

问题的关键就在于,这些新的功能增加了处理开销(processing overhead),也就降低了程序性能。而C语言中没有这些功能,它不需要这些额外的开销,这也意味着程序员自己要分配和释放内存,时刻注意内存泄露问题,处理静态类型的变量。

C语言的设计者权衡了利弊,把速度的需求放在了安全之上。C语言不会:

  • 检查数组索引是否越界
  • 检查未初始化的变量。
  • 检查内存泄露。
  • 检查空的指针的解引用。

当你在JAVA中使用数组索引时,虚拟机中有一些方法调用来检查索引越界和其他的合理性问题。但在C语言中即使是再微小的事情都有安全隐患。它不是用来编写大型的商业软件的。

但这些设计上的决定并不是bugs。这些设计的初衷是为了让编译器和库的编写者可充分利用计算机每一个bit的计算能力。

即便如此,许多语言和平台,例如Java(和它的虚拟机),.NET(和它的通用语言运行库),随着即时编译(从字节码产生本地机器码)等技术的出现,这些年的运行速度也有了很大的提高。

下面是C语言的精神和理论解释:

C语言的不可移植。尽管C语言允许程序员编写可移植的代码,委员会并没有强迫程序员编写可移植的代码,把C语言当成高级汇编语言。能够编写特定机器的语言是C语言的特征之一。

保持C语言的精神。委员会这么做的主要目的也是为了继承C语言的传统精神。这项精神有很多方面,但最根本的是C语言基本原则产生的社区情感,这种社区情感被使用C语言的人所共有。C语言的一些精神可以总结如下:

  • 信任程序员。
  • 不阻止程序员做任何必要的操作。
  • 保持语言的简洁和简单。
  • 一种操作只提供一种方法。
  • 保持速度,即使牺牲可移植性。

稍稍解释一下最后一条,产生高效代码的潜能是C语言最重要的能力。为了力求对一个简单的操作不会出现代码爆发(简单操作需要大量代码),许多操作定义为目标机器的硬件如何操作而不是一般化的抽象规则。这种与机器配合的意愿例子有很多,比如在规定表达式中字符对象的宽度时,字符对象的值是转换为有符号还是无符号类型完全取决于哪种类型在目标机器中计算起来更快。

为什么和其他语言相比C语言是快速的语言的更多相关文章

  1. D、GO、Rust 谁会在未来取代 C?为什么?——Go语言的定位非常好,Rust语言非常优秀,D语言也不错

    不要管我的地位和 D 语言创造者之一的身份.我会坦诚的回答这个问题.我熟悉 Go 和 Rust,并且知道 D 的缺点在哪里.我鼓励人们在 Rust 和 Go 社区相似身份的人,也可以提出他们诚恳的观点 ...

  2. 「C语言」Windows+EclipseCDT下的C语言开发环境准备

    之前写过一篇 「C语言」在Windows平台搭建C语言开发环境的多种方式 ,讨论了如何在Windows下用DEV C++.EclipseCDT.VisualStudio.Sublime Test.Cl ...

  3. c语言学习笔记(1)——c语言的特点

    一.c语言概述 1.为什么学习c语言? (1)c的起源和发展 第一代语言:机器语言  1101 第二代语言:汇编语言  add ax,bx; 第三代语言:高级语言  a+b; 结构化:c fortra ...

  4. C语言的本质(15)——C语言的函数接口入门

    C语言的本质(15)--C语言的函数接口 函数的调用者和其实现者之间存在一个协议,在调用函数之前,调用者要为实现者提供某些条件,在函数返回时,实现者完成调用者需要的功能. 函数接口通过函数名,参数和返 ...

  5. C语言的本质(7)——C语言运算符大全

    C语言的本质(7)--C语言运算符大全 C语言的结合方向 C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左).例如算术运算符的结合性是自左至右,即先左后右.如有表达式 x- ...

  6. R语言︱H2o深度学习的一些R语言实践——H2o包

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- R语言H2o包的几个应用案例 笔者寄语:受启发 ...

  7. GO语言的进阶之路-初探GO语言

    GO语言的进阶之路-初探GO语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么我们需要一门新语言 Go语言官方自称,之所以开发Go 语言,是因为“近10年来开发程序之难 ...

  8. 【golang】 go语言之环境搭建+ 第一个go语言程序

    1 下载:http://www.golangtc.com/download (以win为例) 2 安装步骤: 安装包: go1.8.windows-amd64.msi 双击进行安装 创建工作目录 :D ...

  9. GO语言学习(十六)Go 语言结构体

    Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图 ...

随机推荐

  1. c++ 09

    一.数据结构 程序设计=数据结构+算法 1.逻辑结构 1)集合:元素之间没有联系. 2)线性结构:元素之间存在前后顺序. 3)树形结构:元素之间存在一对多的父子关系. 4)图状结构:元素之间存在多对多 ...

  2. 线程篇-01-NSThread

    一.概述 1.使用NSThread创建线程的三种方式和区别. 二.核心 2.1 NSThread创建线程的三种方式和区别. 主要有NSThread对象的创建线程的类方法detachNewThreadS ...

  3. DBA 经典面试题(5)

    国外公司的Oracle DBA试题 Oracle DBA Interview Questions 1. How many memory layers are in the shared pool? 2 ...

  4. pyqt信号事件相关网址说明及python相关

    pyqt在线文档: http://www.rzcucc.com/search/pyqt.sourceforge.net/Docs/PyQt4/-qdatetime-2.html PyQT信号槽_学习笔 ...

  5. PC--CSS技巧

    1.图片不存在的时候,显示一个默认图片 <img src=”01.jpg” onerror=”this.src=’02.jpg'” /> 2.CSS强制图片自适应大小 img {width ...

  6. Servlet实现Session

    (1)首先看一下项目的结构 是在tomcat--webaps下的myWebSites项目 在myWebSites下有仅仅有WEB-INF目录 在WEB-INF目录中有  一下目录(在classes目录 ...

  7. FlashbackQuery:SCN与timestamp示例

    Flashback QueryFlashback 是ORACLE 自9i 就开始提供的一项特性,在9i 中利用oracle 查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数据,可用来进行 ...

  8. [HeadFist-HTMLCSS学习笔记][第七章CSS入门:加一点样式]

    CSS入门 style元素设置CSS 基本格式 <style type="text/css"> body { background-color: #eaf3da; } ...

  9. 网络基础知识HTTP(1) --转载

    为什么要写网络? 作为网站开发人员,你所开发的软件产品最终是要在网络上运行的.这就像一个生产商,要生产供给东北地区的产品,而生产商对东北的天气.地理.人文毫无了解.生产商的产品肯定是不可用的,或者低端 ...

  10. .NET中反射机制的使用与分析

    .NET中反射机制的使用与分析 [日期:2008-06-30] 来源:  作者:志伟     .NET反射的定义:审查元数据并收集关于它的类型信息的能力. 元数据是一种二进制信息,用以对存储在公共语言 ...