Jack:为什么说C/C++语言是偏向硬件的语言呢?

我:这是把C与java等无指针/引用类编程语言相比较而得出的结论。因为java在j2ee的框架下,写的代码仅仅是逻辑,本质上和写shell脚本没啥大的区别。而写这些代码的童鞋,基本上就是码农的待遇,还算不上程序猿。

Jack:我猜写java代码的人想用砖头来拍你。

我:畅所欲言,欢迎拍砖。

Jack:那C和汇编哪一个是面向机器的呢?

我:C和汇编都是面向机器的。也有人说C是面向过程的。这并不矛盾,只是视点不同。

Jack:既然两者都是面向机器的,为什么会有C语言出现呢?

我:计算机刚出生的时候,每种不同的计算机都有不同的指令。这些指令,能操作计算机的所有部件,使其正常运转。

Jack:你说了等于没说。

我:我说了,但是你没听懂。你说说看,计算机的所有部件是指哪些呢?

Jack:大方向分,CPU、内存、外部设备。

我:是的。编程语言生成的代码是给CPU来执行的,用来操作内存以及外部设备。而每一门编程语言又必须具备逻辑控制结构(顺序、选择、循环),这是通用的。

Jack:日。这些东西太虚了,没啥意思。

我:基本功太差就会觉得这些话太虚。对于计算机而言,内存的指令以及逻辑是通用的,所以,完全可以把它抽象出来,生成另外一门编程语言,也就是大名鼎鼎的C语言。也就是说,C语言其实仅仅具备内存控制能力,外部设备的控制能力是大大的没有。

Jack:你说的真的假的?既然C语言只有对内存的控制能力,没有对外部设备的控制能力,那C语言怎么能写出操作系统内核呢?

我:C语言仅仅写出了操作系统内核的逻辑以及内存控制部分,具体对外部设备的控制是由汇编代码完成的。

Jack:具体一点点呢?

我:也就是说,所有外部设备的驱动代码都是汇编写的。大部分逻辑内存控制部分由C完成。我只能说到这个份上了,再看不懂,真没办法了。

Jack:明白了。但是,你写这篇文章的意义在哪里呢?

我:我举个例子。褚霸曾在我之前的公司做学术交流,提到,在2012年11月11日的淘宝大促中,压力最大的不是db,也不是逻辑层,而是网卡被打满了。这个网卡被打满了,你能联想到哪些idea呢?或者有哪些解决办法吗?

Jack:我日。

我:如果本源技术学得不好,只能做个熟练工,就是你现在的状态。

C语言与汇编“硬在哪里”——什么是面向硬件?的更多相关文章

  1. arm:c语言和汇编混合编程

    仅作演示. 1.C和汇编可相互调用,汇编子函数格式参考 汇编:普通的函数调用的汇编代码解析 http://www.cnblogs.com/mylinux/p/4139972.html 本文演示了 : ...

  2. C语言ASM汇编内嵌语法

    转载:http://www.cnblogs.com/latifrons/archive/2009/09/17/1568198.html C语言ASM汇编内嵌语法 .3 GCC Inline ASM G ...

  3. C语言与汇编的嵌入式编程:求100以内素数

    写汇编之前,需要搞清楚C语言代码的写法,这里以最简单的算法举例说明 C代码如下: #include <stdio.h> void main(){ int i,j; ; ;i<=;i+ ...

  4. C语言ASM汇编内嵌语法【转】

    转自:http://www.cnblogs.com/latifrons/archive/2009/09/17/1568198.html GCC 支持在C/C++代码中嵌入汇编代码,这些汇编代码被称作G ...

  5. C语言调用汇编实现字符串对换

    1. 前面配置arm交叉编译环境. 2. 配置好qemu-arm C语言代码string-switch.c: #include <stdio.h> #include <stdlib. ...

  6. 《Linux内核分析》week1作业-分析一个简单c语言的汇编代码

    1.C语言源码 #include <stdio.h> int g(int x){ ; } int f(int x){ return g(x); } int main(){ )+; } 2. ...

  7. Keil 中关于C语言编译生成汇编代码函数名规则

    在keil 中 C语言的函数有带参数和不带参数之分. 一般的资料里说fun(void)类型的函数不带参数,所以,keil编译器生成的汇编的调用地址(函数名) 为fun.这没有错.事实上,不管C语言的函 ...

  8. C语言的本质(32)——C语言与汇编之C语言内联汇编

    用C写程序比直接用汇编写程序更简洁,可读性更好,但效率可能不如汇编程序,因为C程序毕竟要经由编译器生成汇编代码,尽管现代编译器的优化已经做得很好了,但还是不如手写的汇编代码.另外,有些平台相关的指令必 ...

  9. C语言的本质(30)——C语言与汇编之ELF文件格式

    ELF(Executable and Linking Format)文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,ELF是一种对象文件的格式,用于定义不同类型的对象文件(Obj ...

随机推荐

  1. Javascript--dataTransfer

    描述: 提供对于预定义的剪贴板格式的访问,以便在拖拽中使用 属性 描述 参数 dropEffect[=sCursorStyle] 设置或获取拖拽操作的类型和要显示的光标类型 可选的copy 复制样式被 ...

  2. windows 7 telnet 开启关闭

    win7运行telnet提示:'telnet' 不是内部或外部命令,也不是可运行的程序或批处理文件 原因:win7默认没有打开此功能 解决方案:控制面板->程序和功能->打开或关闭wind ...

  3. VMware安装CentOS 图文教程

    VMware安装CentOS 图文教程 VMware 下安装CentOS6.2 取消 Easy install模式(此模式不好,很多软件没有安装) http://jingyan.baidu.com/a ...

  4. Asp.Net Identity 深度解析 之 注册登录的扩展

    关于权限每个系统都有自己的解决方案,今天我们来讨论一下微软的权限框架Asp.Net Identity ,介绍如下  http://www.asp.net/identity 这里不在赘余. 很多人认为 ...

  5. Liunx readlink命令

    readlink命令 分类: Shell 2013-07-13 16:41 417人阅读 评论(0) 收藏 举报 readlink是linux系统中一个常用工具,主要用来找出符号链接所指向的位置. 在 ...

  6. .net图片裁剪抠图之性能优化

    //.net图片裁剪抠图:1.将不坐标点存入GraphicsPath中:GraphicsPath gPath = new GraphicsPath();2. 通常我们判断一个坐标点是否在闭合区间内通采 ...

  7. JS中的prototype(转载)

    在研究别人写的js图像处理算法时,发现其中脚本中大量使用prototype,很难读明白,就网上查了下资料发现这篇文章很易懂,就转载如下: 1 原型法设计模式 在.Net中可以使用clone()来实现原 ...

  8. SQLSERVER 数据库性能的的基本 MVC + EF + Bootstrap 2 权限管理

    SQLSERVER 数据库性能的基本 很久没有写文章了,在系统正式上线之前,DBA一般都要测试一下服务器的性能 比如你有很多的服务器,有些做web服务器,有些做缓存服务器,有些做文件服务器,有些做数据 ...

  9. 一个小团队TDD游戏及实践

    介绍的这个游戏是自己根据目前带的团队的实际情况来制定的, 在游戏实践过程中,收到了较好的效果,故打算把这个游戏分享出来,一是分享一下实践,而是集思广益,不断完善,更好的利用游戏来锻炼队伍.下面就将游戏 ...

  10. .NET面试问答集锦

    程序员级别鉴定书(.NET面试问答集锦) 提供避免元素命名冲突的方法 DOM适合的使用场景是什么?是否有尺寸限制? DOM是一种与浏览器,平台,语言无关的接口,使你可以访问页面其他的标准组件. DOM ...