堆栈有什么用
答案:1 悬赏:20 手机版
解决时间 2021-02-04 10:41
- 提问者网友:蓝琪梦莎
- 2021-02-04 01:28
堆栈有什么用
最佳答案
- 五星知识达人网友:渊鱼
- 2021-02-04 01:47
问题一:什么是堆栈?堆栈有何作用? 满意答案 热心问友 2011-06-22堆栈其实是数据结果中的两个概念 ,是存放数据的方式,堆:顺序随意;栈:后进先出(Last-In/First-Out)。要说用处,那就是在写代码的时候,有时数据存取肯定是要有规定的顺序的,这个是你自己规定的,然后按照你所写程序的用处的特点来用堆还是栈还是队列之类的顺序 追问: 程序设计时,为什么要对堆栈指针SP重新赋值? 回答: 这不是初始化嘛堆栈是个特殊的存储区,主要功能是暂时存放数据和地址,通常用来保护断点和现场。它的特点是按照先进后出的原则存取数据,这里的进与出是指进栈与出栈操作。80C51片内RAM的部分单元可以用做堆栈。有一个8位的堆栈指针寄存器SP,丹用于指出当前堆栈顶部是片内RAM的哪一个单元。80C51单片机系统复位后SP的初值为07H,也就是将从内部RAM的08H单元开始堆放信息。但是,80C51系列的栈区不是固定的,只要通过软件改变SP寄存器的值便可更动栈区。为了避开工作寄存器区和位寻址区,SP的初值可置为2FH或更大的地址值。如果CPU在操作中要使用两组工作寄存器,如果不使用位变量,SP的初值至少应为0FH或更大的值;如果使用位变量,SP的初值至少应为2FH或更大的值;KeilC51编译器会自动计算SP的初始设定值,无需编程者关心。问题二:到底堆栈是干什么的? 怎么用啊? 堆栈是系统内存管理的一种机制,一般高级语言不会直接提供这种东西,但是编程人员出于堆栈操作特性的原因,可以使用内存操作函数实现堆栈,堆栈分为堆和栈,堆就是一块内存,怎么处理都可以(前提是要有权限),栈必须遵循先进后出的原则,就像一个死胡同,最后进的必须先出。具体的定义参考如下: baike.baidu.com/view/93201.htm问题三:什么是堆栈及堆栈的作用是什么 堆栈是小说中常用的人物塑造方法,通常是为一个小人物所用。举个例子,某剑客非常之吊,被称为天下无敌。可是,一个小人物在与他正面的斗争中,不用任何手段就击败了他,表现出他惊人的实力。这就是对这个小人物的堆栈,为的就是把他通过别人巨大实力的转换成这个人物的威望。这就是堆栈问题四:堆栈的意思和作用 堆栈就是一个特殊内存区域,
用来存放数据
可以用指令PUSH ,POP 操作
主要是用来存放临时数据,比如局部变量,某个函数过程中定义的变量
堆栈是先进后出方式
比如说有个过程求和
int fun(int a,int b)
{
return a+b;
}
void main()
{
int z;
z=fun(5,6)
printf(%d,z)
}
调用fun过程时操作系统会使用堆栈来传递参数,
首先PUSH 5
PUSH 6
CALL FUN
又或者在调用过程前将各个寄存器先保存起来因为数量有限在本过程中可能用到同样的寄存器被覆盖原来的值
main
mov ax,6
mov bx,7
call proc
...
proc1 proc
push ax ;先入
push bx
子过程程序中用到AX,BX
pop bx
pop ax ;后出
ret
proc1 endp问题五:堆栈 在C语言中看到的,是什么东西啊.有什么作用啊,怎么用? 要讲C语言的堆栈,要从计算机的数据内存分配讲起.
____________________
| Stack区(数组,指针,结构体,局部变量)
____________________
| Static变量(静态变量,全局变量)
____________________
| Heep区(堆区)
____________________
| 代码段
____________________
从上面示意图中可看出整个内存分配,堆分配是在内存中按块划分,也就是相对与函数malloc,realloc,calloc.这3个函数为内存分配函数.而且需要手动调用free函数释放资源,否则会造成大量的内存碎片.
如果楼主不相信可以自己写一个死循环,内部调用malloc函数,创建N个内存块,运行一段时间后,绝对会造成系统瘫痪,资源被耗尽.
栈区划分为计算机自身划分,即在函数或局部变量被调用时,系统自动为其分配栈,以后进先出为原则实现变量的保存,在函数调用完毕时,系统会自动释放栈内资源,所以,栈可以说是短命的(生存周期只在调用过程中).
这里只是粗略说了下堆和栈,另外再说下static-->静态区,全局变量或静态变量存放于静态区,只要代码中存在静态变量或全局变量,自动放于静态区,静态区存放的变量生存周期是整个程序结束时才释放.
代码段区,顾名思义存放的是程序代码(暂时先这么理解).
PS:本人原创,最近发现一些人盗用本人回答的问题.特此声明.嘿嘿.
____________________ _________
补充:
我对于C#不是很熟悉,而且我也是从事C开发的,对于面向对象语言应用不是很熟.在这只能给出C++的代码.代码有点长,不知道你能不能看的懂,才写的.
#include
#include
#include
#include
#include
#include
#include
/*
//基于数组的栈的实现
#define N 50
typedef struct Stack{
int top;
int A[N];
}*pStack;
//Pop出栈
int Pop(pStack pst)
{
int e;
if(pst->top == -1)
{
coutA[pst->top];
pst->top--;
// couttop == N-1)
{
cout>问题六:内存中的栈和堆有什么作用? 通常内存分为两部分:一部分是栈(stack,也称堆栈),另一部分是堆(heap)。 栈,可以看作是一摞卡片,最上面的卡片表示程序的当前作用域,这往往就是当前正在执行的函数。当前函数中声明的所有变量都置于栈顶帧中,即占用栈顶帧的内存,这就相当于一摞卡片中最上面的一张卡片。如果当前函数调用了另一个函数,举例来说,当前函数foo()调用了另一个函数bar(),就会在这摞卡片上再加一个新的卡片,这样bar()就有了自己的栈帧(stack frame)以供使用。从foo()传递到bar()的所有 参数都会从foo()栈帧复制到bar()栈帧中。(注:栈帧很有意义,因为栈帧可以为每个函数提供一个独立的内存工作区。如果一个变量是在foo()栈帧中声明的,那么调用bar()函数不会对它带来改变,除非你专门要求修改这个变量。另外,foo()函数运行结束时,栈帧即消失,该函数中声明的所有变量都不会再占用内存了。) 堆,一段完全独立于当前函数或者栈帧的内存区。如果一个函数中声明了一些变量,而且希望当这个函数完成时其中声明的变量仍然存在,就可以将这些变量置于堆中。 堆和栈相比,没那么清晰的结构性。可以把堆可作是一“堆”小玩艺。程序可以在任何时间向这个“堆”增加新的东西,或者修改堆中已有的东西。问题七:堆栈指针的作用是什么 堆栈指针SP就是指出栈顶在内部RAM块中的位置,从它可以了解到存放断点或者现场的位置,压栈后SP+1,出栈后SP-1。问题八:堆栈有什么作用吗,请举几个具体的例子 堆栈应用非常广的
栈LIFO(后进先出)
1、洗盘子。用过的盘子一个一个叠放,那么最上面的盘子先洗,然后是下面的。
2、递归函数返回地址。程序先执行的函数地址扔到最底下,直到递送到有明确返回值函数地址
后,在归回上一层处理它,直到最底部函数都处理完。问题九:栈机制有什么作用 堆栈很大的用途是给函数传递数据的,当然你也可以在程序里使用它哗
用这个样的模式可以节约内存,直接拿来就用, 用完就丢,不用老是跟系统申请内存分配变量了。
要不你编写的代码里老是有一堆getmemory、freememory,看着多罗嗦
用来存放数据
可以用指令PUSH ,POP 操作
主要是用来存放临时数据,比如局部变量,某个函数过程中定义的变量
堆栈是先进后出方式
比如说有个过程求和
int fun(int a,int b)
{
return a+b;
}
void main()
{
int z;
z=fun(5,6)
printf(%d,z)
}
调用fun过程时操作系统会使用堆栈来传递参数,
首先PUSH 5
PUSH 6
CALL FUN
又或者在调用过程前将各个寄存器先保存起来因为数量有限在本过程中可能用到同样的寄存器被覆盖原来的值
main
mov ax,6
mov bx,7
call proc
...
proc1 proc
push ax ;先入
push bx
子过程程序中用到AX,BX
pop bx
pop ax ;后出
ret
proc1 endp问题五:堆栈 在C语言中看到的,是什么东西啊.有什么作用啊,怎么用? 要讲C语言的堆栈,要从计算机的数据内存分配讲起.
____________________
| Stack区(数组,指针,结构体,局部变量)
____________________
| Static变量(静态变量,全局变量)
____________________
| Heep区(堆区)
____________________
| 代码段
____________________
从上面示意图中可看出整个内存分配,堆分配是在内存中按块划分,也就是相对与函数malloc,realloc,calloc.这3个函数为内存分配函数.而且需要手动调用free函数释放资源,否则会造成大量的内存碎片.
如果楼主不相信可以自己写一个死循环,内部调用malloc函数,创建N个内存块,运行一段时间后,绝对会造成系统瘫痪,资源被耗尽.
栈区划分为计算机自身划分,即在函数或局部变量被调用时,系统自动为其分配栈,以后进先出为原则实现变量的保存,在函数调用完毕时,系统会自动释放栈内资源,所以,栈可以说是短命的(生存周期只在调用过程中).
这里只是粗略说了下堆和栈,另外再说下static-->静态区,全局变量或静态变量存放于静态区,只要代码中存在静态变量或全局变量,自动放于静态区,静态区存放的变量生存周期是整个程序结束时才释放.
代码段区,顾名思义存放的是程序代码(暂时先这么理解).
PS:本人原创,最近发现一些人盗用本人回答的问题.特此声明.嘿嘿.
____________________ _________
补充:
我对于C#不是很熟悉,而且我也是从事C开发的,对于面向对象语言应用不是很熟.在这只能给出C++的代码.代码有点长,不知道你能不能看的懂,才写的.
#include
#include
#include
#include
#include
#include
#include
/*
//基于数组的栈的实现
#define N 50
typedef struct Stack{
int top;
int A[N];
}*pStack;
//Pop出栈
int Pop(pStack pst)
{
int e;
if(pst->top == -1)
{
coutA[pst->top];
pst->top--;
// couttop == N-1)
{
cout>问题六:内存中的栈和堆有什么作用? 通常内存分为两部分:一部分是栈(stack,也称堆栈),另一部分是堆(heap)。 栈,可以看作是一摞卡片,最上面的卡片表示程序的当前作用域,这往往就是当前正在执行的函数。当前函数中声明的所有变量都置于栈顶帧中,即占用栈顶帧的内存,这就相当于一摞卡片中最上面的一张卡片。如果当前函数调用了另一个函数,举例来说,当前函数foo()调用了另一个函数bar(),就会在这摞卡片上再加一个新的卡片,这样bar()就有了自己的栈帧(stack frame)以供使用。从foo()传递到bar()的所有 参数都会从foo()栈帧复制到bar()栈帧中。(注:栈帧很有意义,因为栈帧可以为每个函数提供一个独立的内存工作区。如果一个变量是在foo()栈帧中声明的,那么调用bar()函数不会对它带来改变,除非你专门要求修改这个变量。另外,foo()函数运行结束时,栈帧即消失,该函数中声明的所有变量都不会再占用内存了。) 堆,一段完全独立于当前函数或者栈帧的内存区。如果一个函数中声明了一些变量,而且希望当这个函数完成时其中声明的变量仍然存在,就可以将这些变量置于堆中。 堆和栈相比,没那么清晰的结构性。可以把堆可作是一“堆”小玩艺。程序可以在任何时间向这个“堆”增加新的东西,或者修改堆中已有的东西。问题七:堆栈指针的作用是什么 堆栈指针SP就是指出栈顶在内部RAM块中的位置,从它可以了解到存放断点或者现场的位置,压栈后SP+1,出栈后SP-1。问题八:堆栈有什么作用吗,请举几个具体的例子 堆栈应用非常广的
栈LIFO(后进先出)
1、洗盘子。用过的盘子一个一个叠放,那么最上面的盘子先洗,然后是下面的。
2、递归函数返回地址。程序先执行的函数地址扔到最底下,直到递送到有明确返回值函数地址
后,在归回上一层处理它,直到最底部函数都处理完。问题九:栈机制有什么作用 堆栈很大的用途是给函数传递数据的,当然你也可以在程序里使用它哗
用这个样的模式可以节约内存,直接拿来就用, 用完就丢,不用老是跟系统申请内存分配变量了。
要不你编写的代码里老是有一堆getmemory、freememory,看着多罗嗦
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯