栈帧

原创 2018年04月16日 17:19:06

函数的调用过程(栈帧)
我们先来了解一些基本的概念:
1.main函数是函数,但不是第一个被调用的函数,Startup是第一个函数,Startup调用main函数。
2.栈的特点:先进后出,后进先出。比如说:枪,装羽毛球的筒都是栈结构。
3.认识两个操作:push(进栈)和pop(出栈),不管是进栈还是出栈,都是从一个入口(栈顶)进出,所以栈顶移动的也会更加频繁。
4.认识几种寄存器:EBP(栈底)、ESP(栈顶)、EIP(程序计数器:放当前正在执行的下一条指令的地址)、状态寄存器(例如’/0’操作)。
5.汇编调用call的作用:(1)保存正在执行的下条指令的地址,保存上一个栈帧的EBP和ESP可以返回(push:栈中保存);(2)跳转至目标函数,通过调整EIP(jmp:命令跳转)。
6.汇编中用ret的两个作用:(1)pop出返回值;(2)修改EIP(和call的作用相反)。
7.在函数内部定义的变量都在该函数的栈帧中,所以这些变量具有临时性,会被释放(标记无效即可)。新旧变量之间通过创建临时变量来改变。
8.常规变量通过寄存器返回,不受栈帧影响,所以会一直存在,不会随栈帧被释放。
9.形参实例化从右到左的顺序,例如:先a后b->先b后a创造变量,开辟空间。
10.每次函数调用都是一个过程,该过程我们称为函数的调用过程,在这个过程中要为函数开辟栈空间,用于本次函数的调用中临时变量的保存、现场保护。这块栈空间我们称之为函数栈帧。
11.函数调用:
这里写图片描述

栈帧详解

一、 什么是栈帧?     什么是栈帧,相信很多从事C编程的童鞋还是没有搞明白,首先引用百度百科的经典解释:“栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。”。   ...
  • ylyuanlu
  • ylyuanlu
  • 2014-02-06 17:33:41
  • 22485

栈和栈帧

函数
  • qchengsj
  • qchengsj
  • 2014-07-17 22:57:04
  • 3682

浅谈栈帧

一、 什么是栈帧? 什么是栈帧,首先引用百度百科的经典解释:“栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。 实际上,可以简单理解为:栈帧就是存储在用户栈上的(当然内核栈同样适...
  • qq_25253287
  • qq_25253287
  • 2016-06-10 10:07:13
  • 6859

深入理解Java虚拟机笔记---运行时栈帧结构

栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表,操作...
  • xtayfjpk
  • xtayfjpk
  • 2014-12-14 12:40:59
  • 6312

栈帧---函数调用原理

下面我通过一个简单的实例来分析函数调用原理------栈帧 首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。 寄存器ebp指向...
  • dream_1996
  • dream_1996
  • 2016-12-23 23:27:16
  • 1034

堆栈和栈帧

堆栈和栈帧 最近看CSAPP,感觉有疑惑,顺便总结一下。 1.堆栈     我们平时说的堆栈其实是指栈,而实际上堆和栈是两种不同的内存分配。简单罗列一下各方面的异同点。     1).堆需...
  • huang1024rui
  • huang1024rui
  • 2016-02-23 22:26:09
  • 1126

JVM_16_运行时栈帧结构

运行时栈帧结构 参考资料: 《图解JVM字节码执行引擎之栈帧结构》 《Java Virtual Machine Specification Java SE 7 》 栈帧...
  • Simba_cheng
  • Simba_cheng
  • 2017-10-19 12:40:02
  • 219

Java 栈帧

结构: 1. 局部变量表:一组变量值的存储空间,用于存放方法参数和方法内的局部变量,编译完成后大小确定,最基本的单位slot,而且slot可以进行重用,一旦某个变量超出其存在的域,其他变量可重用其内...
  • qq_17612199
  • qq_17612199
  • 2016-05-01 12:44:47
  • 914

JVM运行时栈帧结构

栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态链接、方法返回地址等信息。 局部变量表: ...
  • qq_24690761
  • qq_24690761
  • 2016-03-15 21:09:56
  • 1343

运行时栈帧结构

概述  栈帧用于支持虚拟机进行方法调用和方法执行的数据结构,是虚拟机栈的栈元素,存储了方法的局部变量表、操作数栈、动态链接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在...
  • u012715840
  • u012715840
  • 2017-05-28 21:39:53
  • 275
收藏助手
不良信息举报
您举报文章:栈帧
举报原因:
原因补充:

(最多只允许输入30个字)