python中栈函数 python3 栈( 三 )


(6)存放内容不同 。栈存放的内容,函数返回地址、相关参数、局部变量和寄存器内容等 。当主函数调用另外一个函数的时候,要对当前函数执行断点进行保存,需要使用栈来实现,首先入栈的是主函数下一条语句的地址,即扩展指针寄存器的内容(EIP),然后是当前栈帧的底部地址 , 即扩展基址指针寄存器内容(EBP) , 再然后是被调函数的实参等,一般情况下是按照从右向左的顺序入栈,之后是被调函数的局部变量 , 注意静态变量是存放在数据段或者BSS段,是不入栈的 。出栈的顺序正好相反 , 最终栈顶指向主函数下一条语句的地址 , 主程序又从该地址开始执行 。堆,一般情况堆顶使用一个字节的空间来存放堆的大?。?而堆中具体存放内容是由程序员来填充的 。
从以上可以看到 , 堆和栈相比,由于大量malloc()/free()或new/delete的使用,容易造成大量的内存碎片,并且可能引发用户态和核心态的切换,效率较低 。栈相比于堆 , 在程序中应用较为广泛,最常见的是函数的调用过程由栈来实现 , 函数返回地址、EBP、实参和局部变量都采用栈的方式存放 。虽然栈有众多的好处,但是由于和堆相比不是那么灵活,有时候分配大量的内存空间,主要还是用堆 。
无论是堆还是栈,在内存使用时都要防止非法越界 , 越界导致的非法内存访问可能会摧毁程序的堆、栈数据,轻则导致程序运行处于不确定状态,获取不到预期结果,重则导致程序异常崩溃,这些都是我们编程时与内存打交道时应该注意的问题 。
关于python中栈函数和python3 栈的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。