浅谈C++中的运行栈的一些知识

来源:互联网 发布:java飞机大战项目介绍 编辑:程序博客网 时间:2024/05/22 05:11

今天又看了一遍有关运行栈的知识,在此,我谈谈我的想法。

栈,顾名思义,就是客栈的意思(通俗来说)。就说明了它是临时歇息的地方,不是长久停留的地方。

变量分全局变量和局部变量,全局变量自始至终有确定的内存地址,而局部变量却没有(部分原因是如果给局部变量分配内存空间的话,在它的生存期结束后(生存期相对于整个程序很短),内存不能释放,造成空间浪费,尤其是局部变量比较多时),那局部变量怎么办呢?这就引入了运行栈这个概念。(注:函数中的变量一般就是局部变量)。

将数据送进运行栈叫做压入栈,送出运行栈叫做弹出栈。

运行栈的运行方式是后进先出。对应于函数调用就是越晚调用的函数越早被弹出。

运行栈本质上还是一段内存空间,只不过和普通内存空间不同的是,它们的读写操作有所不同。

运行栈由一个一个的栈帧组成,每一个栈帧对应一次函数调用,栈帧中可以包含有形参、局部变量和一些临时数据等,当发生函数调用时,函数将实参压入栈中的一段内存空间,这个内存空间是栈中单独拿出的一段空间,主调函数和被调函数都能直接访问这段内存,然后进行形实结合,调用完成后,弹出栈,进行下一个函数调用,以此类推。

其实仔细想一想,运行栈和函数调用联系的比较密切,而函数中的变量大都是局部变量,把它们联系在一起是再合适不过了。

其实可以说运行栈解决了函数调用中局部变量的问题,让这些局部变量在需要的时候有内存地址,完成使命后释放内存地址,从而提高了内存利用率。

以上就是我对运行栈的一些认识。

0 0