栈的应用 函数调用

首先操作系统为每个线程都分配了一块独立的空间,这块空间被组织成了栈这种数据结构,这玩意是用来存储栈帧,每进入一个函数,就会将该函数的栈帧入栈,但这个函数执行完,返回结果之后,这个函数对应的那个栈帧就出栈了,下面通过简单的代码的执行过程来说明一下吧:

    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int c =sum(a, b);
        System.out.println(c);
    }
    
    static int sum(int a, int b) {
        return a + b;
    }    

加上下面这张图你会更好立即:

当sum方法执行完后sum方法出栈,返回值,main继续执行,当main执行完成后main也出栈。所以他们的出栈顺序是 sum --> main

栈帧(Stack Frame):是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。第一个方法从调用开始到执行完成,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。

猜你喜欢

转载自www.cnblogs.com/IT-CPC/p/10886391.html