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. C#获取本机所有用户名

    using System.DirectoryServices; using System.Runtime.InteropServices; (需要添加引用) [StructLayout(LayoutK ...

  2. SQL点滴25—T-SQL面试语句,练练手

    原文:SQL点滴25-T-SQL面试语句,练练手 1. 用一条SQL语句查询出每门课都大于80分的学生姓名 name   kecheng    fenshu 张三     语文     81张三    ...

  3. oracle中intersect的用法

    和 UNION 指令类似, INTERSECT 也是对两个 SQL 语句所产生的结果做处理的.不同的地方是, UNION 基本上是一个 OR (如果这个值存在于第一句或是第二句,它就会被选出),而 I ...

  4. windows服务安装启动报错误1053:服务没有及时响应启动或控制请求

    <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0&qu ...

  5. Windows平台分布式架构实践负载均衡

    Windows平台分布式架构实践 - 负载均衡 概述 最近.NET的世界开始闹腾了,微软官方终于加入到了对.NET跨平台的支持,并且在不久的将来,我们在VS里面写的代码可能就可以通过Mono直接在Li ...

  6. IDE编程环境

    Vim配置及说明——IDE编程环境 目录 Vim配置及说明——IDE编程环境 1.基本及字体 2.插件管理 3.主题风格 4.窗口设置 5.目录树导航 6.标签导航 7.taglist 8.多文档编辑 ...

  7. win7 64位系统装oracle11 提示环境变量path 值超过1023字符

    win7 64位系统装oracle10 提示环境变量path 值超过1023字符 1.提示环境变量path 值超过1023字符. 方案: 1.oracle安装文件,右键属性--设置兼容性--兼容XP ...

  8. JAVA面试精选

    JAVA面试精选[Java基础第一部分] 这个系列面试题主要目的是帮助你拿轻松到offer,同时还能开个好价钱.只要能够搞明白这个系列的绝大多数题目,在面试过程中,你就能轻轻松松的把面试官给忽悠了.对 ...

  9. Real-Rime Rendering (1) - 渲染管线(Rendering Pipeline)

    提要 渲染管线是实时渲染中最重要的部分,它的最主要的任务就是在给定一个虚拟的场景,包括相机,object,灯光,纹理等等,生成一副2D的图像. 最基础的渲染管线如下图所示: 主要的阶段包括三个:App ...

  10. AngularJS的初始化

    AngularJS的初始化 本文主要介绍AngularJS的自动初始化以及在必要的适合如何手动初始化. Angular <script> Tag 下面通过一小段代码来介绍推荐的自动初始化过 ...