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. MVC5+ 路由特性

    MVC5+ 路由特性 概述 ASP.NET MVC 5支持一种新的路由协议,称为路由特性. MVC5也支持以前定义路由的方式,你可以在一个项目中混合使用这两种方式来定义路由. 案例 1.使用Visua ...

  2. C# 对Outlook联系人的增、删、查 

    原文:C# 对Outlook联系人的增.删.查 [转] 注:定义变量 Outlook.Application myOlApp = new Outlook.ApplicationClass(); Out ...

  3. Microsoft .NET Pet Shop 简介

    最初研究 .NET Pet Shop 的目的是用 Microsoft .NET 实现 Sun 主要的 J2EE 蓝图应用程序 Sun Java Pet Store 同样的应用程序功能. 根据用 .NE ...

  4. python初始化MySQL数据库模板

    很基础,但是经常用到,记录一下,省得每次手打 #!/bin/env python # -*- encoding=utf-8 -*- import MySQLdb # Database info hos ...

  5. leetcode[60] Rotate List

    题目:给定链表,和一个k,把链表的后k个旋转到前头,例如链表为: 1->2->3->4->5->NULL and k = 2, return 4->5->1- ...

  6. javascript 动态创建tip图片提示

    前言: 在做前端的项目中,经常看到移动一个小图标上显示这个图标对应的大图的提示,之前的做法是在小图标的位置后面添加一个div,然后移动到小图标然后显示这个图标的图片!但是这个方法做的时候发现,如果提示 ...

  7. Twitter Bootstrap JavaScript插件

    Twitter Bootstrap JavaScript插件本文收集了10款非常不错的JavaScript Twitter bootstrap扩展插件,利用Boostrap开发者可以节省大量的时间修复 ...

  8. WebService使用DataSetSurrogate压缩Dataset的序列化和解压反序列化传输 (转)

    转自:http://blog.163.com/hehong0925@126/blog/static/1339333372012102242920521/ 在WebService中将dataset序列化 ...

  9. 【转】Android的Merge讲解与实例

    原文:http://blog.sina.com.cn/s/blog_62f987620100sf13.html 单独将<merge />标签做个介绍,是因为它在优化UI结构时起到很重要的作 ...

  10. POCO Controller

    ---恢复内容开始--- POCO Controller 你这么厉害,ASP.NET vNext 知道吗?   写在前面 阅读目录: POCO 是什么? 为什么会有 POJO? POJO 的意义 PO ...