python的函数栈 python中的栈( 二 )


(6)存放内容不同 。栈存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等 。当主函数调用另外一个函数的时候 , 要对当前函数执行断点进行保存 , 需要使用栈来实现,首先入栈的是主函数下一条语句的地址,即扩展指针寄存器的内容(EIP) , 然后是当前栈帧的底部地址,即扩展基址指针寄存器内容(EBP),再然后是被调函数的实参等 , 一般情况下是按照从右向左的顺序入栈,之后是被调函数的局部变量,注意静态变量是存放在数据段或者BSS段,是不入栈的 。出栈的顺序正好相反,最终栈顶指向主函数下一条语句的地址,主程序又从该地址开始执行 。堆,一般情况堆顶使用一个字节的空间来存放堆的大?。?而堆中具体存放内容是由程序员来填充的 。
从以上可以看到,堆和栈相比,由于大量malloc()/free()或new/delete的使用,容易造成大量的内存碎片,并且可能引发用户态和核心态的切换 , 效率较低 。栈相比于堆,在程序中应用较为广泛 , 最常见的是函数的调用过程由栈来实现,函数返回地址、EBP、实参和局部变量都采用栈的方式存放 。虽然栈有众多的好处 , 但是由于和堆相比不是那么灵活,有时候分配大量的内存空间,主要还是用堆 。
无论是堆还是栈,在内存使用时都要防止非法越界,越界导致的非法内存访问可能会摧毁程序的堆、栈数据,轻则导致程序运行处于不确定状态,获取不到预期结果,重则导致程序异常崩溃,这些都是我们编程时与内存打交道时应该注意的问题 。
python中的堆栈什么意思堆栈是一种执行“后进先出”算法的数据结构 。
设想有一个直径不大、一端开口一端封闭的竹筒 。有若干个写有编号的小球,小球的直径比竹筒的直径略小 。现在把不同编号的小球放到
竹筒里面 , 可以发现一种规律:先放进去的小球只能后拿出来,反之,后放进去的小球能够先拿出来 。所以“先进后出”就是这种结构的
特点 。
堆栈是计算机中最常用的一种数据结构,比如函数的调用在计算机中是用堆栈实现的 。堆栈可以用数组存储 , 也可以用以后会介绍的链
表存储 。
堆栈就是这样一种数据结构 。它是在内存中开辟一个存储区域,数据一个一个顺序地存入(也就是“压入——push”)这个区域之中 。
有一个地址指针总指向最后一个压入堆栈的数据所在的数据单元,存放这个地址指针的寄存器就叫做堆栈指示器 。开始放入数据的单元叫
做“栈底” 。数据一个一个地存入,这个过程叫做“压栈” 。在压栈的过程中,每有一个数据压入堆栈,就放在和前一个单元相连的后面
一个单元中 , 堆栈指示器中的地址自动加1 。读取这些数据时 , 按照堆栈指示器中的地址读取数据,堆栈指示器中的地址数自动减 1 。这
个过程叫做“弹出pop” 。如此就实现了后进先出的原则 。
推荐学习《python教程》 。
python的函数栈的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python中的栈、python的函数栈的信息别忘了在本站进行查找喔 。

推荐阅读