为什么说C语言是直接对硬件操作的语言?
其它的程序语言最终不也是对硬件操作吗?比如用C语言声明inta=5;和用C#声明inta=5;都是在栈中声明一个存储空间来存放5这个值吗?它们都是对内存操作呀,可是为什么...
其它的程序语言最终不也是对硬件操作吗?
比如用C语言声明 int a=5;
和用C#声明int a=5;都是在栈中声明一个存储空间来存放5这个值吗?它们都是对内存操作呀,可是为什么人们都说只有C语言可以直接对硬件操作呢?如果说C语言有指针的话那么有指针的语言也不仅它一个呀?
再说了,C语言也不可能随便在一个芯片上运行吧,还是针对特定的系统,开发出该系统上C语言的编译器,,经过这个编译器编译后的代码只能在这个特定的系统上运行,这样说对吗?
小弟新手,这些问题不太明白,请详细讲解,谢谢! 展开
比如用C语言声明 int a=5;
和用C#声明int a=5;都是在栈中声明一个存储空间来存放5这个值吗?它们都是对内存操作呀,可是为什么人们都说只有C语言可以直接对硬件操作呢?如果说C语言有指针的话那么有指针的语言也不仅它一个呀?
再说了,C语言也不可能随便在一个芯片上运行吧,还是针对特定的系统,开发出该系统上C语言的编译器,,经过这个编译器编译后的代码只能在这个特定的系统上运行,这样说对吗?
小弟新手,这些问题不太明白,请详细讲解,谢谢! 展开
展开全部
首先,C语言不能够直接对硬件进行操作。从本质上来说,连汇编语言都不可以。只有机器语言能够直接操作硬件。
其次,C语言要操作硬件是必须经过一系列的编译转换。最终它会成为0101的机械码,这个时候它根本不是我们所能够理解的C语言了。
以GCC编译器为例,这个可以分为四步。
第一步是预处理,包括语法检查等工作。
gcc -P abc.c
第二步由源程序生产汇编语言代码。
gcc -S abc.c
会生成abc.s文件,这个文件里就是汇编代码。
第三步编译器生成目标代码,一个源文件生成一个目标代码。
gcc -c abc.c
会生成abc.o
第四步连接器从目标代码生成可执行文件。
gcc abc.o最后,相对来说,C语言在高级语言当中是最贴近物理层面的语言。它也被称作高级语言里面的低级语言。因为它很多方面都非常贴近硬件。典型的就是指针,这是一种通过物理地址直接操作内存的变量。
展开全部
楼上的描述不准确,C语言直接对硬件操作的例子比如直接通过C语言写入芯片的控制寄存器,配置芯片的工作模式,达到用户希望的效果,如定时器。这一点类似于单片机。 对内存的操作事实上还是由更低级的存储器控制芯片完成的。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其它语言最终对硬件操作并不是这种语言完成的,而是由计算机操作系统(如windowsxp)来完成的。
如int a=5;并不是对地址在操作,而是由操作系统自动分配了个地址来存放a,你也不知道这个地址确切是多少
c语言接近硬件是指它可以直接用指针访问硬件地址。如:malloc,new函数
int *p; p = new int; //返回类型为int* 类型(整数型指针),分配大小为 sizeof(int);
int* p; p = (int *) malloc (sizeof(int));
然后就可以对这个指针指向的内存地址进行赋值等操作
如int a=5;并不是对地址在操作,而是由操作系统自动分配了个地址来存放a,你也不知道这个地址确切是多少
c语言接近硬件是指它可以直接用指针访问硬件地址。如:malloc,new函数
int *p; p = new int; //返回类型为int* 类型(整数型指针),分配大小为 sizeof(int);
int* p; p = (int *) malloc (sizeof(int));
然后就可以对这个指针指向的内存地址进行赋值等操作
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
VB不行
语言从低级到高级,语义功能越来越完善(意思是写出来的程序越来越接近人类语言),但是同时失去了对硬件的直接操纵能力,而且执行效率越来越低。
比如最低级的机器语言(全部是各种数字),没学过根本看不出是什么意思,但是对硬件操纵能力最强,想怎么让硬件做硬件就会怎么做。执行效率为百分之百。
其次是汇编语言,汇编语言稍微向英语迈进了一点,但是很有限,一般人也看不明白的,比如这句
mov a,b
谁知道什么意思!其操纵硬件能力也极强,随心所欲,执行效率基本也是百分之百。
而C语言介于高级和低级之间,代码容易理解,还可以用指针操纵硬件(不过还是很局限的,CPU就无法之间操纵了),执行效率为80%,对于一直语言来说很不错了。
Basic语言完全是高级语言,代码简单,但是不具备操纵硬件能力,也就是你想写个代码直接让内存怎么怎么样,内存不听你的,只听编译好的程序的。而且执行效率也很低了。
语言从低级到高级,语义功能越来越完善(意思是写出来的程序越来越接近人类语言),但是同时失去了对硬件的直接操纵能力,而且执行效率越来越低。
比如最低级的机器语言(全部是各种数字),没学过根本看不出是什么意思,但是对硬件操纵能力最强,想怎么让硬件做硬件就会怎么做。执行效率为百分之百。
其次是汇编语言,汇编语言稍微向英语迈进了一点,但是很有限,一般人也看不明白的,比如这句
mov a,b
谁知道什么意思!其操纵硬件能力也极强,随心所欲,执行效率基本也是百分之百。
而C语言介于高级和低级之间,代码容易理解,还可以用指针操纵硬件(不过还是很局限的,CPU就无法之间操纵了),执行效率为80%,对于一直语言来说很不错了。
Basic语言完全是高级语言,代码简单,但是不具备操纵硬件能力,也就是你想写个代码直接让内存怎么怎么样,内存不听你的,只听编译好的程序的。而且执行效率也很低了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
按你举的例子 写int a=5 都是分配一个空间
但是你有没有想过 到底是谁给我们分配的这个空间?计算机是怎么理解到的?
举一个不恰当的例子吧 : 一只小狗叫一声表示 你好 一个人用一门很复杂的语言 说了一句 你好 对于同样接收到这两个信息的对象而言那个更直白呢更容易理解呢?
但是你有没有想过 到底是谁给我们分配的这个空间?计算机是怎么理解到的?
举一个不恰当的例子吧 : 一只小狗叫一声表示 你好 一个人用一门很复杂的语言 说了一句 你好 对于同样接收到这两个信息的对象而言那个更直白呢更容易理解呢?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询