1.堆栈本质上只是普通的内存地址
2.堆和栈本来是两种数据结构,现常用“堆栈”连用仅表示栈。
3.栈的使用方式是临时存放数据,在某一段内存中,从内存地址最后开始存放,像叠盘子一样,只能将最后放入的数据先取出来。
4.栈在汇编语言中经常使用,cpu寄存器中有sp(32位为esp),即stack pointer,指向当前栈的顶端,汇编语言中的栈并非其他语言中的一种数组型的数据结构,而直接简化为一段内存,通过pop和push等指令来进行直接的内存操作。
5.堆和栈有相似,即皆是一段普通内存,不同点是,堆是顺序存放,且堆只能由程序员申请让系统分配,而栈是程序员自行分配。
6.8086汇编一般无堆,win32汇编中可使用API函数来操作堆。
最底下封口的存储空间,按照先进后出,后进先出的原则。
栈机制是用来暂存数据的,因为数据不可能都保存在寄存器里面。额,我不知道你对汇编了解不,先来一段代码:
mov ax,20h
mov ss,ax 定义了SS的段地址。
mov sp,10h 定义了栈底。
以上代码定义了栈段。
现在,我要计算100:0-100:10内存单元的和,就需要暂时保存内存单元100:0-100:10的数据:
mov ax,100h
mov ds,ax
定义了ds的段地址
mov cx,11
sub bx,bx
s:push [bx] 把100:0压栈
inc bx
loop s
上面是一个循环
栈机制是一个很灵活的技术,一定要灵活地掌握,但是我不了解你的情况,也许你需要把问题描述一次
堆栈就是一种存放数据的格式,也可以说是一个存放数据的空间