该函数的代码

超越函数调用指令的地址推送到堆栈。这是怎样的CPU记住去后,函数返回。

房间是在函数的返回类型的堆栈。这只是一个占位符,现在。

该CPU跳转到该函数的代码。

的栈顶指针是在一个特殊的举行,称为堆栈帧。一切都添加到堆栈之后这一点被认为是“本地”的功能。

所有的函数参数都放在栈。

这个函数的内部指令开始执行。

局部变量推到堆栈上为它们定义。

当函数结束,以下步骤发生:

函数的返回值复制到占位符,被用于此目的的堆栈。

后弹出堆栈帧指针是一切。这破坏了所有的局部变量和参数。

返回值是弹出堆栈和分配作为函数值。如果该函数的值未分配到任何东西,没有分配发生,而失去价值。

要执行的下一条指令的地址是从堆栈中弹出,并继续执行,CPU的指令。

通常情况下,它是不知道如何调用堆栈的作品的重要的细节。然而,理解功能有效地在堆栈上时,他们被称为弹出当他们返回给你需要理解递归的基本原理,以及一些其他的概念是有用的调试时。

堆栈溢出

堆栈的大小有限制,因此只能容纳有限的信息。如果程序试图把太多的信息会导致堆栈,堆栈溢出。堆栈溢出发生在堆栈中的所有内存被分配-在这种情况下,进一步分配开始泛滥到存储器的其它部分。

堆栈溢出通常是分配太多变量在堆栈上的结果,和/或使太多的嵌套的函数调用(在函数调用函数调用函数调用函数D B C等)的堆栈溢出通常会导致程序崩溃。

下面是一个示例程序,导致堆栈溢出。你可以在你的系统崩溃,看它:

这个程序试图分配堆栈上的一个巨大的阵列。由于堆栈不足以处理这个数组,该数组分配内存溢出到部分的程序是不允许使用。因此,程序崩溃。

堆栈的优点和缺点:

存储在堆栈上,停留在范围,只要是在栈。这是破坏时,弹出堆栈。

所有的内存分配在堆栈是在编译时已知。因此,这种记忆可以直接通过变量访问。

由于堆栈是比较小的,通常不是一个好主意,这样吃了大量的堆栈空间的任何东西。这包括分配大的数组,结构,和类,以及沉重的递归。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值