C语言与汇编“硬在哪里”——什么是面向硬件?
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语言与汇编“硬在哪里”——什么是面向硬件?的更多相关文章
- arm:c语言和汇编混合编程
仅作演示. 1.C和汇编可相互调用,汇编子函数格式参考 汇编:普通的函数调用的汇编代码解析 http://www.cnblogs.com/mylinux/p/4139972.html 本文演示了 : ...
- C语言ASM汇编内嵌语法
转载:http://www.cnblogs.com/latifrons/archive/2009/09/17/1568198.html C语言ASM汇编内嵌语法 .3 GCC Inline ASM G ...
- C语言与汇编的嵌入式编程:求100以内素数
写汇编之前,需要搞清楚C语言代码的写法,这里以最简单的算法举例说明 C代码如下: #include <stdio.h> void main(){ int i,j; ; ;i<=;i+ ...
- C语言ASM汇编内嵌语法【转】
转自:http://www.cnblogs.com/latifrons/archive/2009/09/17/1568198.html GCC 支持在C/C++代码中嵌入汇编代码,这些汇编代码被称作G ...
- C语言调用汇编实现字符串对换
1. 前面配置arm交叉编译环境. 2. 配置好qemu-arm C语言代码string-switch.c: #include <stdio.h> #include <stdlib. ...
- 《Linux内核分析》week1作业-分析一个简单c语言的汇编代码
1.C语言源码 #include <stdio.h> int g(int x){ ; } int f(int x){ return g(x); } int main(){ )+; } 2. ...
- Keil 中关于C语言编译生成汇编代码函数名规则
在keil 中 C语言的函数有带参数和不带参数之分. 一般的资料里说fun(void)类型的函数不带参数,所以,keil编译器生成的汇编的调用地址(函数名) 为fun.这没有错.事实上,不管C语言的函 ...
- C语言的本质(32)——C语言与汇编之C语言内联汇编
用C写程序比直接用汇编写程序更简洁,可读性更好,但效率可能不如汇编程序,因为C程序毕竟要经由编译器生成汇编代码,尽管现代编译器的优化已经做得很好了,但还是不如手写的汇编代码.另外,有些平台相关的指令必 ...
- C语言的本质(30)——C语言与汇编之ELF文件格式
ELF(Executable and Linking Format)文件格式是一个开放标准,各种UNIX系统的可执行文件都采用ELF格式,ELF是一种对象文件的格式,用于定义不同类型的对象文件(Obj ...
随机推荐
- JS实现倒计时网页自动跳转(如404页面经常使用到的)
在web前端设计中,我们经常会遇到需要实现页面倒计时跳转的功能,例如在404页面中也会经常使用到此功能,那么如何实现呢,其实实现方法很简单,实现代码如下:<title>JS倒计时网页自动跳 ...
- 提高mysql千万级数据SQL的查询优化30条总结
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- jQuery库(noConflict)冲突解决机制
很多JSFramework库选择使用$符号作为一个函数或变量名,而在实际的项目开发,模板语言,则有可能"$"符号是模板语言keyword.例如Veclocity模板语言,$它是ke ...
- libvlc media player in C# (part 1)
原文 http://www.helyar.net/2009/libvlc-media-player-in-c/ There seems to be a massive misconception ab ...
- 快速构建Windows 8风格应用12-SearchContract概述及原理
原文:快速构建Windows 8风格应用12-SearchContract概述及原理 本篇博文主要介绍Search Contract概述.Search Contract面板结构剖析.Search Co ...
- GIMP也疯狂之动态图的制作(四)
本篇文章为gimp制作动态图的第四篇.在之前的基础上简单的拓展了下思路.就能做出蛮实用的动态图.本文将介绍两个动态图.第一个为在一张静态图上添加动态图,第二个图为修改部分渐变. 效果: 素材: 其实, ...
- 在Ubuntu中编译QT工程Tesful
今天晚上开机到Ubuntu中了,试了一下之前在Windows下建立的Tesful工程,发现没有任何改动就可以编译成功/运行. 附上图:
- 【Android开发日记】妙用 RelativeLayout 实现3
段布局
在设计过程中,我们经常会遇到这样的需求: 把一条线3控制,左对齐左控制,右侧控制右对齐,中间控制,以填补剩余空间. 或者一列内放3个控件,上面的与顶部对齐,以下的沉在最底部,中间控件是弹性的.充满剩余 ...
- js判断浏览器类型(手机和电脑终端)
工作中经常会用到通过js来判断浏览器的功能!今天这里通过js来判断浏览器是来自移动设备还是pc设备! 代码如下: var browser={ versions:function(){ var u = ...
- 【转】在PC上测试移动端网站和模拟手机浏览器的5大方法
查了很多资料,尝试了大部分方法,下面将这一天的努力总结下分享给大家,也让大家免去看那么多文章,以下介绍的方法,都是本人亲自测试成功的方法,测试环境winxp. 一.Chrome*浏览器 chrome模 ...