为什么C语言运行需要堆栈,汇编不需要

C语言 码拜 8年前 (2016-04-24) 1789次浏览
1、为什么C语言运行时需要堆栈,汇编运行时不需要?
2、在不用堆栈的情况下能不能实现有C代码到汇编代码的转换?
3、在调用函数时保存现场用到的push、pop指令可以用别的已有的汇编指令代替,是不是可以做一个编译器直接将C转为汇编而不需要堆栈?本人只是讨论这种可能性,为了理解第1个问题。
解决方案

20

引用:
Quote: 引用:

谁告诉你汇编不要堆栈的?

http://www.cnblogs.com/myblesh/archive/2012/04/07/2435737.html

人家说的是“不需要初始化堆栈”,你非要断章取义成“不需要堆栈”!为什么C语言运行需要堆栈,汇编不需要

20

引用:
Quote: 引用:

可不可以这样理解:堆栈只能用汇编语言来初始化,不管是纯汇编、纯C、还是c和汇编混合的程序都需要汇编来先初始化堆栈?

差不多可以这样理解
从纯粹的 C的语法上来说,是没有办法初始化堆栈的。
例如 标准C 语言,就没有提供直接操作硬件的支持。
但是C允许嵌入 汇编。甚至直接嵌入二进制指令
有些编译器,例如Dos下的TC 有寄存器伪变量
都可以一定程度的在C中,直接操纵硬件
勉强用C初始化,也能凑乎。
(甚至C的编译选项中,也可以适当的影响堆栈的设置。)
但显然不如汇编更合适,受到的限制更小
编写代码更容易,也更清晰,甚至可读性也更好。
毕竟,这些关键代码,
其实只是程序中很小的一部分,虽然可能是最重要的一部分。
因此,虽然是汇编语言实现的,但是代码其实很短
其实,纯C 的初始化部分在编译器的库里,这部分很有可能就是汇编写成的
还有一些函数,如 exit,_exit 也可能是汇编写成的。
只是他们多半已经编译好了,随着编译器发布而已。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明为什么C语言运行需要堆栈,汇编不需要
喜欢 (0)
[1034331897@qq.com]
分享 (0)