问题描述:
初学微机,每次编写程序时总要加入堆栈段,但是我不知道它在程序孙正运行起什么作用。望指教!
解析:
因为CPU要使用堆栈,主要是子程序调用call和ret指令,使用堆栈来存储返回地址,调用子程序的时候,后调用的子程序先返回,而且还可能嵌套调用甚至递归调用则尺悔,所以必须使用先进后出的数据结构stack来实现返回地址的存储。
没有堆栈stack,就无法实现函数/子困宏程序调用,
还有高级语言都用stack来存储局部变量和参数,汇编也可以用,但是比较麻烦。汇编经常使用stack来保存寄存器的值,PUSH和POP指令比较好用
设计原因有两点:⑴栈的存取速度特别快,仅次于寄存器。当程序要在内存中读写数据时,先找到栈,再通过栈的指向到堆内存中进行数据的读写。由于不用再遍历速度慢而且数据多的堆内存,所以程序的运行速度会更快。⑵便于内存的回者配收。当程序的一些数据不用后,就会丢掉栈内存中相应的数据,此时以前指向的堆内存空间就没有了栈的派嫌李指向,变成了垃圾。这时Java虚拟机的垃圾回收机制就会将这块没有栈指向的堆内存空间回收,供给以后的程序使用。
堆栈的用途主要是调用子程序时暂存断点地址和保护(恢复)现场数据。堆栈是一种存储部件,即数据的写入跟读出不需要提供地址,而是根据写入的顺序决定读出的顺序尘迟。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)