首页
学习
活动
专区
工具
TVP
发布

深入

每个方法被执行的时候,java虚拟机都会同步创建一个的基本单位为,每个线程都有自已的,每个执行方法对应一个,也叫当前。...每一个都包括了局部变量表,操作数,动态连接,方法返回地址和一些额外的附加信息。 的特点就是后进先出,类似于坐电梯,后面进来的先出去。...特点: 局部变量的生命周期与一致:随着方法的销毁,局部变量随着销毁。...注: 操作数最大深度不会超过:max_stacks数据项中设定的最大值 byte、short和char类型在入前会被转成int类型; 虽然两个不同是相互独立的但是,为了节约一些空间,对进行了优化...注意:若调用方法返回的时候带了返回值,其返回会被压入当前的操作数中,并更新PC寄存器中一条需要执行的字节码指令。

78910
您找到你想要的搜索结果了吗?
是的
没有找到

函数(超详细)

提示:以下是本篇文章正文内容,下面案例可供参考 一、函数 1.1函数的概念 函数是指在函数被调用时,系统为该函数在(Stack)区域中开辟的一段存储空间。...1.2函数的作用 函数是程序执行过程中用来进行内存管理的必备工具。当函数被调用时,系统为该函数分配空间,将函数的返回地址、指针、局部变量、参数等信息保存在中。...2.1减少的大小 由于函数的大小直接影响程序内存的使用效率,因此我们可以通过一些优化手段减少的大小,从而提升程序的性能。...减少的深度 由于的深度直接影响的大小和内存的使用效率,因此我们可以通过减少的深度来提升程序的性能。...三、函数的调试与问题排查 调试和排查函数相关的问题是在开发过程中常见的任务。

9310

指针&& 指针详解

单个函数调用操作所使用的部分被称为(stack frame)结构,其一般结构如下图所示。结构的两端由两个指针来指定。...在函数执行过程中,指针esp会随着数据的入和出而移动,因此函数中对大部分数据的访问都基于指针%ebp进行。?对于函数A调用函数B的情况,传递给B的参数包含在A的中。...当A调用B时,函数A的返回地址(调用返回后继续执行的指令地址)被压入中,中该位置也明确指明了A的结束处。而B的则从随后的部分开始,即图中保存指针(ebp)的地方开始。...这两个函数的结构如图3-5所示。可以看出,函数swap()从调用者main()的中获取其参数。图中的位置信息相对于寄存器ebp中的指针。左边的数字指出了相对于指针的地址偏移值。...前两行用来设置保存调用者的指针和设置本函数的指针,第5行通过把指针esp下移4字节为局部变量c分配空间。6~15行是swap函数的主体部分。

7.5K30

CCPP函数括号{} | | 堆栈 | 变量

,至此main函数的保护工作完成,然后通过mov指令更新基准线,与顶水位线齐平。...至此红蓝两条线都恢复到了最开始的位置,main函数在恢复完成。 不准确的说,函数的就是红蓝两条线之间的内存块,它用来存放函数的临时变量,参数和返回地址。...所谓的保护恢复,不过是在保存和恢复寄存器esp和ebp的值。 至于return address是用来做:函数返回的。...随着函数的调用,函数的会逐层堆叠,但互不重合。 随着函数的逐层返回函数的会被就地放弃,但不会清理内存。...2 正括号{用来保护上层主调函数(main)的,并设置被调函数(func)的,反括号}用来放弃被调函数的,同时恢复主调函数的,这样被调函数执行完后,主调函数就能正常执行。

62910

什么是虚拟机_

一般来讲,之间都是独立的,但是大多虚拟机都会做优化,使局部变量表和操作数之间有重叠,以达到共用的目的,这样能节省额外的参数复制等工作,重叠过程类似下图。...动态连接每个都包含一个指向运行时常量池中该所属方法的引用,Class 文件的常量池中存有大量的符号引用。字节码中的方法调用指令就以常量池中方法的符号引用为参数。...方法返回时可能会在中保存一些信息,用来恢复上层方法的执行状态。一般方法正常退出的时候,调用者的pc计数器的值可以作为返回地址,中很有可能会保存这个计数器的值作为返回地址。...方法退出的过程就是在虚拟机上的出过程,因此退出时的操作可能有:恢复上层方法的局部变量表和操作数,把返回值压入调用者的操作数每条整pc计数器的值指向调用该方法的后一条指令。...如果异常退出的话,返回地址是通过异常表来确定,中一般不会保存这部分信息。这两个出口的区别就在于,异常完成出口退出是不会给上一层调用者产生任何返回值的。

4600

PWN从入门到放弃(3)——&

其中 ESP:堆栈指针寄存器,存放执行函数对应顶地址,且始终指向顶。 EBP:基址指针寄存器,存放执行函数对应底地址,用于 C 运行库访问中的局部变量和参数。...0x02 函数调用经常是嵌套的,在同一时刻,堆栈中会有多个函数的信息。每个未完成运行的函数占用一个独立的连续区域,称作 (Stack Frame)。...是堆栈的逻辑片段,当调用函数时逻辑被压入堆栈, 当函数返回时逻辑被从堆栈中弹出。存放着函数参数,局部变量及恢复前一所需要的数据等。...的边界由基地址指针 EBP 和堆栈指针 ESP 界定 (指针存放在相应寄存器中)。...EBP 指向当前底部 (高地址),在当前内位置固定;ESP 指向当前顶部 (低地址),当程序执行时 ESP 会随着数据的入和出而移动。

11110

理解 JVM Stack Frame

前置知识 JVM运行时数据区 的组成 虚拟机 虚拟机(JVM Stack),由 Frame 组成。...Frame - 每个方法对应一个, 包括以下部分: Local Variable Table (局部变量表) ?...return address(返回地址) a() -> b(),方法a调用了方法b, b方法的返回值放在什么地方 方法退出时会做的操作: 恢复上一个方法(调用者的)的Local Variable...Table(局部变量表)和Operand Stack(操作数) 将返回的变量压入 上一个方法(调用者的)的Operand Stack(操作数) 调整 Program Counter Register...(PC, 程序计数器) 的值为 当前的返回地址 当前弹出JVM Stack , 执行Program Counter Register (PC, 程序计数器)指向的指令 理解JVM 用两个代码来帮助理解

69020

函数的创建和销毁

提示:以下是本篇文章正文内容,下面案例可供参考 一、函数的创建 函数的创建是在函数调用时进行的,中包含了局部变量、函数参数、返回地址和调用者的上下文等信息。具体的创建过程如下: 1....函数参数的传递 在函数调用时,参数的值会被压入中,这些参数会成为新的一部分。在中,函数参数的位置是从高地址到低地址分配的。 2....二、函数的销毁 函数的销毁是在函数返回时进行的。在函数返回之前,需要将中的信息恢复并将其从中弹出。具体的销毁过程如下: 1....减小指针 在完成上述过程后,需要将指针(P)向下移动,以便将当前中弹出。当指针恢复到上一个的位置时,程序会从该处继续执行,直到遇到下一个函数调用。...的大小限制: 的大小是由局部变量、函数参数和其他信息所占用的内存大小决定的。在设计函数时,我们应该合理估计局部变量的大小和数量,避免过大导致溢出。

6910

函数的创建和销毁

那么通过学习函数的创建和销毁,以上困惑就会迎刃而解。...注: 本次讲解使用的是vs2013,不要使用太高级的编译器,越高级的编译器,越不容易学习和观察;同时,在不同的编译器下,函数调用过程中的创建是略有差异的,具体细节取决于编译器的实现。...为了讲清楚函数,我们需要先做一些铺垫: 寄存器: eax ebx ecx edx ebp esp ebp、esp这2个寄存器中存放的是地址,这2个地址是用来维护函数的...每一个函数调用,都要在区创建一个空间 接下来,就正式开始介绍函数的创建和销毁 push ebp mov ebp,esp sub esp,0E4h push ebx push esi push...总结: 局部变量在函数的里被分配了一些空间进行创建 局部变量不初始化的时候是随机值(比如上述过程中不初始化之前是cccccccc) 函数在调用之前就把参数从右向左进行压;真正进入函数后通过指针的偏移量找到形参

13210

函数的创建和销毁

---- 1.什么是函数 函数( stack frame )就是函数调用过程中在程序的调用( call stack )所开辟的空间,这些空间是用来存放: 函数参数和函数返回值...3.函数的创建和销毁解析 3.1 ( stack )是现代计算机程序里最为重要的概念之一,几乎每一个程序都使用了,没有就没有函数,没有局部变量,也就没有我们如今看到的所有的计算机语言。...转入目标函数 jump :通过修改 eip ,转入目标函数,进行调用 ret :恢复返回地址,压入 eip ,类似 pop eip 命令 3.3解析函数的创建和销毁 3.3.1... 基本知识 1.每一次函数调用,都要为本次函数调用开辟空间,就是函数的空间。...2.这块空间的维护是使用了两个寄存器:esp ebp,ebp记录的是底的地址,esp记录的是顶的地址。 3.函数的创建和销毁过程,在不同的编译器上实现的方法大同小异。

76020

C语言函数的详解

、理解 ​ 首先,什么是?...引用百度百科:C语言中,每个对应着一个未运行完的函数。中保存了该函数的返回地址和局部变量。从这句话中,可以提炼以下几点信息: 是一块因函数运行而临时开辟的空间。...每调用一次函数便会创建一个独立中存放的是函数中的必要信息,如局部变量、函数传参、返回值等。 当函数运行完毕将会销毁。 ​ 下面进入主题,图解函数的创建与销毁过程。...在调试过程中将转到反汇编,便能直观的看到main函数创建的过程。首先需明确的是,函数由寄存器esp,ebp维护。...进入Add()函数,可以看出这与此前main函数开辟的过程类似,说明Add()函数调用又开辟了一块独立的

1.9K20

深入理解JVM - 和分派

jvm当中实现的 桢的内部结构 我们说下桢的内部结构,桢是存在于虚拟机的基本组成单元,也可以认为是调用方法的本质,而桢中则存放了虚拟机的字节码指令需要用到的数据,下面我们先来看下桢里面都包含哪些内容...: 局部变量表 操作数 动态链接 方法返回地址 附加信息 可以看到一个桢的内容还是不少的,这里我们按照顺序来讲述每一个“变量”的内容: 局部变量表 局部变量表可以简单理解为我们定义方法的方法参数,...有时候甚至会影响虚拟机的自身优化 操作数 操作数是一个后入后出的结构,主要的作用和名字一样是用于方法中的数值运算的,通过推和出的方式计算变量的结果,操作数和局部变量表一样,根据不同的位数占用的大小不一样...动态链接 动态链接表示的是保持指向运行常量所属方法引用 ,他的存在意义是「支持动态连接的方法调用过程」 ,这里可能不太理解,其实动态链接主要干的事情是下面两件: class常量池当中存在方法指令的符号引用...返回值压入中 最后还包含一些额外信息,但是这部分内容并不重要这里也就直接跳过了。

47120

C语言函数调用及结构

如图: 二、的建立 首先要明白几个地方:每一个函数都有自己的空间,并且独占自己的空间, 当前正在运行的函数的总是在顶。...Win32系统提供两个特殊的寄存器用于标识位于系统顶端的。...ESP:指针寄存器(extended stack pointer),其内存放着一个指针,该指针永远指向系统最上面一个顶,即顶寄存器。...状态值:保存前的顶部和底部(实际上只保存前的底部,前的顶部可以通过平衡计算得到),用于在本被弹出后恢复出上一个。...「注:函数的大小并不固定,一般与其对应函数的局部变量多少有关。函数运行过程中,其大小也是在不停变化的。除了与相关的寄存器外,我们还需要记住另一个至关重要的寄存器。」

1.3K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券