C 中栈与函数调用的关系,c与c 在栈区为函数分配的空间有区别吗?

2021-03-10 19:53:16 字数 1315 阅读 3015

1楼:天蝎神经侠侣

call stack 是指存

bai放某个程序的正在运行

的du函数的信zhi息的栈。call stack 由

dao stack frames 组成,每个 stack frame 对应于一个未

专完成运行的属函数。

在当今流行的计算机体系架构中,大部分计算机的参数传递,局部变量的分配和释放都是通过操纵程序栈来实现的。栈用来传递函数参数,存储返回值信息,保存寄存器以供恢复调用前处理机状态。每次调用一个函数,都要为该次调用的函数实例分配栈空间。

为单个函数分配的那部分栈空间就叫做 stack frame,也就是说,stack frame 这个说法主要是为了描述函数调用关系的。

stack frame 组织方式的重要性和作用体现在两个方面:

第一,它使调用者和被调用者达成某种约定。这个约定定义了函数调用时函数参数的传递方式,函数返回值的返回方式,寄存器如何在调用者和被调用者之间进行共享;

第二 ,它定义了被调用者如何使用它自己的 stack frame 来完成局部变量的存储和使用。

2楼:匿名用户

哦,这样啊!那就这样。

3楼:匿名用户

函数定义的时候要定义局部变量,这些局部变量就是储存在栈中的,栈中的内存是由计算机管理的,不用管理函数调用的时候分配栈内存和释放栈内存,我对这个的理解也不是很深刻,只希望我的回答能够对你有所帮助

4楼:嘻哈王者

栈中的内存是由计算机管理的,不用管理函数调用的时候分配栈内存和释放栈内存,而且栈是先进后出的只能在栈头和栈尾进行操作,而函数可以在局部定义这些变量是存储栈中的

c与c++在栈区为函数分配的空间有区别吗?

5楼:

这不是语言标准规定的,是编译器的具体实现决定的。比如vc的debug/release开关编译的程序开辟函数栈的行为是有不同的。release版是看函数内有多少变量,需要多少空间就开辟多少空间,而debug版开辟的空间要大一些,并全部以0xcccccccc填充,以避免缓冲区溢出,保护函数栈。

其他的c编译器和c++编译器没用过,不知道他们的行为是怎样,不过应该区别不大,都是为一个嵌套的函数开辟一个内存地址更低处的栈帧。

6楼:

没有大的区别,都是先压入函数的参数,然后是现场,最后是函数内部的自动变量。

微小的区别在于,执行c++的成员函数时,压入的参数中会多加一个类实例的this指针。

7楼:匿名用户

这应该跟系统和环境,还有编译器有关吧。

C++中纯虚函数和虚函数在定义上的区别是什么

1楼 志祥罗志祥 主要就是纯虚函数相比虚函数在定义的时候没有定义函数体而且会在定义的时候在后面多加一句 0 c 中 虚函数与纯虚函数的区别是什么? 2楼 月无痕 虚函数与纯虚函数 在他们的子类中都可以被重写。它们的区别是 1 纯虚函数只有定义,没有实现 而虚函数既有定义,也有实现的 。 纯虚函数一般...

概率密度函数与分布函数的区别,概率密度函数与分布函数有什么区别和联系?

1楼 匿名用户 概率密度和分不函数的区别。 就和速度和位移的关系类似。 某一点的概率密度的值表示在该点附近的概率? 就相当于某一个时刻的速度,能表示在该时刻附近的位移吗? 当然是否的,至少你需要乘一个时间,或者你可以任取一个时间段 当然要足够短 中任取一个时刻的速度当做整个时间段的速度,而整个时间段...

边际分析与弹性分析的区别和联系,经济学中边际函数和弹性的区别与联系

1楼 税政小屋 区别 边际分析是单个产品 服务 的变动生产成本或利润,没多生产一个需要投入多少或赚多少。弹性是 降到什么程度仍可以保持盈利。 边际利润越大,弹性越大。边际成本越高,弹性越小。 经济学中边际函数和弹性的区别与联系 2楼 常揣想 边际函数是每增加一个单位相应增加的量,就是对总函数求导。弹...