三九宝宝网宝宝百科宝宝知识

堆栈指令是什么意思

03月12日 编辑 39baobao.com

[堆栈操作指令StackOperationInstruction]堆栈是一个重要的数据结构,它具有“先进后出”的特点,通常用来保存程序的返回地址。它主要有两大类操作:进栈操作和出栈操作。1)、进栈操作、PUSH(Push Word or Doubleword o...+阅读

堆栈其实不只是我们平常意义上所谓的具有后进先出特性的数据结构。严格来讲并不存在堆栈这样一种结构,只是在日常工作中我们将前述的这种数据结构称为堆栈罢了,但其实确切的说应该叫做栈 (Stack) 。而堆 (Heap) 其实是另一种允许随意访问的数据存储空间。

首先从汇编的角度来理解堆和栈

我们都知道在汇编语言中有著名的三个段:代码段,数据段和堆栈段。同为存储数据为什么有两个不同区域呢?其实我们仔细想一下就会明白,我们所谓的堆栈段,或者说栈段,正是那种支持后进先出特性的内存区域。汇编语言里面的 POP 和 PUSH 两个指令就是来操作堆栈段的。而对于数据段我们可以在其中开辟自己命名的内存空间,然后使用指针来访问,这正是堆。

标准 C++

再将语言提升一个层次,在标准 C++ 中——这也许是我们在学校中接触最久的一个语言了,但有谁能说在学校里面学明白了呢?误人子弟呀!——是否也有这样的区别呢?答案是肯定的。先来看这样的一个类。

class MyClass {

public:

MyClass(int _a, int _b) {

a = _a;

b = _b;

}

~MyClass() {};

private:

int a;

int b;

};

然后我们声明 MyClass 类的实例,问题就出来了。

void main() {

MyClass myObj(1, 2); //此时该对象位于栈上

MyClass* pMyObj = new MyClass(1, 2); //此时该对象位于堆上,并通过指针与我们交流。

...

}

上面的示例似乎在表明这样一个原则,对象所存在的位置与程序员声明的方式有关。是的!不仅如此,栈对象和堆对象的行为也是不一样的。我们都知道从汇编角度来看,当一个子程序退出时,我们需要使用 RET n 来退栈,即将在子程序中使用过的内存空间释放。因此栈对象会随着方法执行的结束而自动释放,不会产生泄漏。而堆对象却是不可以的,因此我们才须要在方法退出之前,手动释放内存空间,即 delete pMyObj; 这也是我上面为什么给出省略号的原因。

在 .net Framework 中

在 .net 中问题又有所不同,由于内存被 CLR 托管,我们不能再随意地将对象放在你希望的位置上了。这部分工作完全由 CLR 来接管。CLR 的实现是所有的值对象都被放在栈上,当方法退出时自动销毁;而所有的引用对象都被放在托管堆上 (由 CLR 的内存回收服务控制的内存区域被称为托管内存或托管堆,而前面提到的标准 C++ 中的堆相应的被称为本地堆),通过托管的指针,在 C# 中是对象引用,在 C++/CLI 中是追踪句柄,来访问。它的释放不依赖于方法的退出,也不依赖于程序员,而是依赖于内存回收机制。

这里就引出了另外一个问题,为什么装箱 (Boxing) 和拆箱 (Unboxing) 操作会有性能损失。因为对于所有值类型都为栈上,而将其转变为引用类型 object 会发生两个动作,一是将值对象从栈拷贝到托管堆上,然后再给其加上一些原数据 (Metadata)使之可以被托管堆控制,这比无论是直接访问值对象还是引用对象而言都要额外消耗不少的时间,因此也就产生了性能问题。拆箱的原理刚好相反。

堆和栈的区别可以用如下的比喻来看出:

使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是快捷,但是自由度低。

使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

汇编语言里面的堆栈是什么东西啊!

1.堆栈本质上只是普通的内存地址

2.堆和栈本来是两种数据结构,现常用“堆栈”连用仅表示栈。

3.栈的使用方式是临时存放数据,在某一段内存中,从内存地址最后开始存放,像叠盘子一样,只能将最后放入的数据先取出来。

4.栈在汇编语言中经常使用,cpu寄存器中有sp(32位为esp),即stack pointer,指向当前栈的顶端,汇编语言中的栈并非其他语言中的一种数组型的数据结构,而直接简化为一段内存,通过pop和push等指令来进行直接的内存操作。

5.堆和栈有相似,即皆是一段普通内存,不同点是,堆是顺序存放,且堆只能由程序员申请让系统分配,而栈是程序员自行分配。

6.8086汇编一般无堆,win32汇编中可使用API函数来操作堆。

什么叫堆栈?8051堆栈指示器SP有多少位作用是什么

堆栈是连续的内存单元,存取方式遵循“先进后出”的原则。

其作用一般是保存寄存器或标志寄存器的内容。

堆栈就是这样一种数据结构。它是在内存中开辟一个存储区域,数据一个一个顺序地存入(也就是“压入——push”)这个区域之中。有一个地址指针总指向最后一个压入堆栈的数据所在的数据单元,存放这个地址指针的寄存器就叫做堆栈指示器。开始放入数据的单元叫做“栈底”。数据一个一个地存入,这个过程叫做“压栈”。在压栈的过程中,每有一个数据压入堆栈,就放在和前一个单元相连的后面一个单元中,堆栈指示器中的地址自动加1。读取这些数据时,按照堆栈指示器中的地址读取数据,堆栈指示器中的地址数自动减

1。这个过程叫做“弹出pop”。如此就实现了后进先出的原则。

sp是一个8位专用寄存器,它批示出堆栈顶部在内部ram块中的位置。系统复位后,sp初始化为07h,实际上堆栈是由08h单元开始的。考虑08h~1fh单元分别属于工作寄存器区1~3,若在程序设计中用到这些区,则最好把sp值改值为1fh或更大的值。

sp是一个8位专用寄存器,它批示出堆栈顶部在内部ram块中的位置。系统复位后,sp初始化为07h,实际上堆栈是由08h单元开始的。考虑08h~1fh单元分别属于工作寄存器区1~3,若在程序设计中用到这些区,则最好把sp值改值为1fh或更大的值。

mcs-51的堆栈是向上生成的,若sp=60h,cpu执行一和调用指令或者响应中断后,pc进栈,pcl保护到61h,pch保护到62h,sp=62h。

plc的堆栈命令mpp mps mrd字面意思理解但是实际是用来存放的

1、MPS(进栈指令):将运算结果送入栈存储器的第一段,同时将先前送入的数据依次移到栈的下一段。

2、MRD(读栈指令):将栈存储器的第一段数据(最后进栈的数据)读出且该数据继续保存在栈存储器的第一段,栈内的数据不发生移动。

3、MPP(出栈指令):将栈存储器的第一段数据(最后进栈的数据)读出且该数据从栈中消失,同时将栈中其它数据依次上移。

一、堆栈概述:

堆栈其实不只是我们平常意义上所谓的具有后进先出特性的数据结构。严格来讲并不存在堆栈这样一种结构,只是在日常工作中我们将前述的这种数据结构称为堆栈罢了,但其实确切的说应该叫做栈 (Stack) ,而堆 (Heap) 其实是另一种允许随意访问的数据存储空间。

二、PLC概述:

可编程逻辑控制器,是一种采用一类可编程的存储器,用于其内部存储程序,执行逻辑运算、顺序控制、定时、计数与算术操作等面向用户的指令,并通过数字或模拟式输入/输出控制各种类型的机械或生产过程。

以下为关联文档:

民办学校是什么意思?公办学校是什么意思1.民办学校是指国家机构以外的社会组织或者个人,利用非国家财政性经费,面向社会依法举办的学校或其他教育机构。 学校是培养人才,传授知识的地方。从培养人才的层次上,可分为小...

pk是什么意思?PK是什么意思如果要评选2005年度最热门词汇,PK想必会光荣上榜,这都要归功于今年夏天湖南电视台刮的“超女”风,让PK一词随之家喻户晓。 PK的意思就是选手面对面的单挑独斗,站上PK台,对决双方...

指令错误是怎么回事啊“内存不能为read”错误的原因以及解决方法运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。“0x?”指令引用的“0x?”内存不能为read''“0x?”指令引用的“0x?”...

什么是指令什么是程序什么是指令: 计算机是“聪明傻瓜”,不告诉它怎样干它什么也不会干,告诉它怎样干它会干得很好。这就要使计算机明白一个个的命令,它就会按照你的命令去干。这种给计算机的命令,又...

计算机执行一条指令的步骤是什么执行一条指令的步骤是:取指令指令分析和指令执行。 简单说一下吧,取指令是按照指令计数器的内容访问主存储器,取出一条指令送到指令寄存器。指令分析是指对指令的操作码进行...

计算机指令是什么意思?一般可分为哪几类指令计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程。控制器靠指令指挥机器工作,人们用指令表达自己的意图,并交...

计算机的一条指令是什么含义?计算 1 1时一共用到几条指令计算机指令一般是指:CPU完成特定功能的最小程序段,一般一汇编指令的方式表现出来。 例如:一个数据传送指令:MOV AX ,1;是指把操作数1放到逻辑名称为AX的这个寄存器(CPU中的硬件结...

秘什么意思密什么意思意与义各是什么意思秘是秘奥之义,是形容法门之深奥;密是隐密,言其法不随便公开示人。 又,术语)秘密之法藏也。甚深秘奥,唯为佛与佛之境界,非凡常所可了知之法门,故曰密。又如来能护念深法,苟非其器,则秘...

达的意思是什么有谁知道达坂是什么意思达的意思是什么有谁知道达坂是什么意思,24V电流电线用多大怎么计算的:达坂在维语当中的意思是高高的山口和盘山公路。 另介绍一下达坂城,不知是不是你要的?不是就算了。 新疆乌...

推荐阅读
图文推荐