初入门的我们经常听见别人说“真正的程序员用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. PhpForm表单相关的超全局变量操作

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 关于Redis

    在同步dump.rdb文件时要执行service redis stop后,再拷贝目标rdb文件过去,然后再start 而不是拷贝目标rdb文件过去后直接执行restart  因为redis在执行sto ...

  3. hdu 3635 Dragon Balls(并查集应用)

    Problem Description Five hundred years later, the number of dragon balls will increase unexpectedly, ...

  4. pyqt listview基础学习01

    from decimal import * from PyQt4.QtGui import * from PyQt4.Qt import * from PyQt4.QtCore import * im ...

  5. Dalvik虚拟机JNI方法的注册过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8923483 在前面一文中,我们分析了Dalvi ...

  6. vue-router 快速入门

    ue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用.vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来.传统的页面应用 ...

  7. "a newer version of unity web player is required but the auto-update failed"

    问题背景描述: 项目采用winform调用unity web player作为播放器在客户端使用. 在有些环境会出现标题所示错误. 经过一翻研究后发现是插件在向服务器请求更新以下文件时报http 30 ...

  8. avalon2学习心得(1)

    github上,avalon2的项目描述是这样的:“avalon2是一款基于虚拟DOM与属性劫持的 迷你. 易用. 高性能 的 前端MVVM框架, 适用于各种场景, 兼容各种古老刁钻浏览器, 吸收最新 ...

  9. jquery滚动到指定元素,模仿锚点

    html <div class="pd-nav"> <div class="n-item active"> 保险服务 <i> ...

  10. Highcharts属性

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...