栈:1、又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把 另一端称为栈底。其特性是先进后出。2、栈是线程私有的,生命周期跟线程相同,当创建一个线程时,同时会创建一个栈,栈的大小和深度都是固定的。3、方法参数列表中的变量,方法体中的基本数据类型的变量和引用数据类型的引用都存放在栈中,成员变量和对象本身不存放在栈中。运行时,成员函数的局部变
转载
2024-02-19 11:57:34
36阅读
写在前面的话:Java虚拟机是一门学问,是众多Java大神们的杰作,由于我个人水平有限,精力有限,不能保证所有的东西都是正确的,这里内容都是经过深思熟虑的,部分引用原著的内容,讲的已经很好了,不在累述。当然在这里,不可能所有细节都深层次的分析,只讲到一些比较重要的概念,由于对计算机组成原理理解不深,绝大部分只能采取黑盒理论来分析。 运行时的栈帧结构(什么是栈帧?)  
转载
2023-08-13 14:36:55
106阅读
最近在看函数的栈帧 ,英文名称 stack frame ,我看了国内和一些国外的文章,发现讲的都不是很清楚,今天就来说说,我不喜欢纯粹说理的文章。废话不多说,coding them首先新建一个c 文件,姑且命名为 main.c#include <stdio.h>int NUM=100;int n;static int m= 36;int sum(int _a,int _b){ i
原创
2023-01-16 06:51:35
102阅读
虚拟机栈这一部分真的很重要,内容也比较多,一起来看一下吧。Java虚拟机栈概述栈是管方法的,基本单位是栈帧,一个栈帧就是一个方法,栈只有两个操作:入栈和出栈,执行一个方法,这个代表这个方法的栈帧入栈,作为栈顶,这个方法是当前方法,执行结束,栈帧出栈。栈是线程私有的,生命周期与线程一致。栈中是没有垃圾回收的,但是有OOM(内存溢出)。这是因为栈的大小可以是固定的,也可以是动态的,这个是程序员可以设置
转载
2023-09-20 20:34:57
126阅读
代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步。概述栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机里面从入栈到出栈的过程。在编译程序代码的时候,栈帧中
转载
2024-01-15 20:36:54
35阅读
虚拟机栈也被很多人称为Java栈。它是线程私有的,虚拟机栈描述的是Java方法执行的内存结构。每个方法被执行的时候都会创建一个栈帧用于存储局部变量表,操作栈,动态链接,方法出口等信息。每一个方法被调用的过程就对应一个栈帧在虚拟机栈中从入栈到出栈的过程。栈的数据结构是先进后出。栈帧: 是用来存储数据和部分过程结果的数据结构。
栈帧的位置: 内存 -> 运行时数据区 -> 某个线程对应的
转载
2024-04-16 17:03:42
20阅读
栈帧由三部分组成:局部变量区,操作数找和帧数据区。局部变量区和操作数栈的大小要 视对应的方法而定,它们是按字长计算的。编译器在编译时就确定了这些值并放在class文件中。 而帧数据区的大小依赖于具体的实现。当虚拟机调用一个Java方法时,它从对应类的类型信息中得到此方法的局部变量区和操作数 栈的大小,并据此分配栈帧内存,然后压人Java栈中。局部变量区Java栈帧的局部变量区被组织为一个以字长为单
转载
2023-07-20 17:07:54
225阅读
原标题:Java中的堆和栈知识讲解1、共同点:堆和栈都是Java中用来在RAM中存放数据的地方。2、区别:(1)栈(Stack):Java中一个线程一个栈区,每一个栈中的元素都是私有的,不被其他栈所访问。栈有后进先出的特点,栈中的数据大小与生存期都是确定的,缺乏灵活性,但是,存取速度比堆要快,仅次于CPU中的寄存器,另外栈中的数据是共享的。在Java中,所有的基本数据类型和引用变量(对象引用)都在
转载
2023-06-21 14:43:08
68阅读
一、栈帧 栈帧(Frame)是用来存储数据和部分过程结果的数据结构,同时也被用来处理动态链接(Dynamic Linking)、方法返回值和异常分派(Dispatch Exception)。 栈帧随着方法调用而创建,随着方法结束而销毁——无论方法是正常完成还是异常完成(抛出了在方法内未被捕获的异常)都算作方法结束。栈帧的存储空间分配在Java虚拟机栈之中,每一个栈帧
转载
2023-08-25 17:48:00
14阅读
目录
1、栈的定义
2、栈的实现
2.1、顺序结构实现
2.2、共享栈的定义
2.3、链式结构实现
3、栈的应用
[1]栈的定义
栈是一种只能在一端进行插入或删除的线性表。表中允许进行插入、删除操作的一端称为栈顶,表的另一端称为栈底,当栈中没有元素时称为空栈,栈的插入操作通常称为进栈或入栈,栈的删除操作通常称为出栈或退栈
在CPU中,通常有通用寄存器,如指令寄存器IR;而push的意思是压栈,即这里
原创
2023-01-16 09:37:48
113阅读
栈帧布局栈帧在函数调用时进行构建,以进行内存的隐式分配。内存可以显示的通过malloc(), calloc(), realloc(), new, free和delte在堆上进行申
原创
2022-12-19 17:31:23
396阅读
@TOC(文章目录)一、对于esp与ebp寄存器的说明ebpesp两个寄存器存放的是地址使用地址维护函数栈帧!在这里插入图片描述(https://s2.51cto.com/images/blog/202209/17075808_63250d906a1bb1823.png?xossprocess=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_
推荐
原创
2022-09-17 08:00:01
414阅读
我们在学习c的时侯可能会有很多疑问,例如局部变量是怎么创建的?为什么局部变量的值是随机值?函数是怎么传参的?传参的顺序又是什么?形参和实参是什么关系?函数调用是怎么做的?函数调用结束后又是怎么返回的?要弄懂这些问题我们首先就要了解计算机内部是有6种寄存器存在的,分别是eax,ebx,ecx,edx,ebp和esp.而今天我要重点介绍的就是ebp寄存器和esp寄存器.首先我们要知道每一次函数调用包括
原创
精选
2023-03-03 22:41:19
395阅读
1、什么是栈帧?栈帧也叫过程活动记录,是编译器用来实现函数调用过程的一种数据结构。C语言中,每个栈帧对应着一个未运行完的函数。从逻辑上讲,栈帧就是一个函数执行的环境:函数调用框架、函数参数、函数的局部变量、函数执行完后返回到哪里等等。栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器eb
原创
2017-05-08 09:50:47
1913阅读
栈帧结构含义:C语言中,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。栈帧也叫过程活动记录,是编译器用来实现过程函数调用的一种数据结构。从逻辑上讲,栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回到哪里等等。实现上有硬件方式和软件方式(有些体系不支持硬件栈)首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个
转载
2024-04-24 10:14:36
22阅读