程序运行时使用栈来保存调用过程的信息


在什么情况下可以用栈来存储数据?

另外,在WINDOWS下,最好的方式是用VirtualAlloc分配内存,他不是在堆,也不是在栈,而是直接在进程的地址空间中保留一快内存,虽然用起来最不方便。

栈是在一列数据中,一块后进先出的地方,在编程中比如1+2+3++100,就可以利用栈来完成;而队列先进先出的地方,比如打印文档就是排队等候,先到的就先得打印一样。

堆栈只是数据存储处理的方式。PLC的数据存储和处理就要利用这个方式进行,把先进的数据在缓存区一级一级的堆栈存储起来,CPU再从缓存区根据先进先出或者先进后出的顺序进行一个一个采样计算。输出也是一样。

堆栈段在程序中的作用

1、堆栈段一般是拿来保存局部变量用的,函数调用,中断返回都需要栈的支持。良好的程序员和优美的代码不应该没有堆栈段。

2、解析:因为CPU要使用堆栈,主要是子程序调用call和ret指令,使用堆栈来存储返回地址,调用子程序的时候,后调用的子程序先返回,而且还可能嵌套调用甚至递归调用,所以必须使用先进后出的数据结构stack来实现返回地址的存储。

3、因为CPU要使用堆栈,主要是子程序调用call和ret指令,使用堆栈来存储返回地址,调用子程序的时候,后调用的子程序先返回,而且还可能嵌套调用甚至递归调用,所以必须使用先进后出的数据结构stack来实现返回地址的存储。

4、堆栈段主要用于暂时保存一些数据,不可或缺。操作系统在把应用程序装入内存时,默认分配堆栈段与代码段同段,应用程序可以自行设置自己的堆栈段。

栈在编程中主要用做什么?

1、栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底。最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

2、栈是一种能够做压栈操作或出栈操作的线性结构,她遵循“FILO(先进后出)”的规律。就是有一定容量的空栈,我压栈数值a,压栈数值b,然后出栈一次就得到b,再出栈一次得到a。

3、栈的功用相当于一个特定的备份空间。。典型用法就是调用子程序时,备份子程序可能改变那些寄存器的值,便于子程序返回主程序的寄存器值的回复。。

4、主要用途:函数调用和返回,数字转字符,表达式求值,走迷宫等等。在CPU内部栈主要是用来进行子程序调用和返回,中断时数据保存和返回。在编程语言中:主要用来进行函数的调用和返回。

c++的“栈”是什么啊?

C语言中的堆和栈都是一种数据项按序排列的数据结构。栈就像装数据的桶或箱子我们先从大家比较熟悉的栈说起吧,它是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。

您所说的栈,是由操作系统负责管理的一段栈空间,在递归、子程序调用等处应用广泛。这是操作系统的范畴。——并不是在C语言范畴讨论的概念。

栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等值。局部变量,任务线程函数之类的是放在(使用)栈里面的,栈利用率高一些。其操作方式类似于数据结构中的栈。

栈,可以看作是一摞卡片,最上面的卡片表示程序的当前作用域,这往往就是当前正在执行的函数。堆,一段完全独立于当前函数或者栈帧的内存区。

栈是一种数据结构,用于存放数据,可以理解为羽毛球筒,羽毛球就是数据,最先放进去的最后才能拿出来。c语言可以用结构体来定义栈,每个元素以指针指向它前面的元素,最前面的元素称为栈顶,它的指针为空。

栈是用来保存数据的,数据形式是先压栈的最后出,最后压栈的最先出栈,就像米缸一样,你先放进去的要最后才能吃,反而最后放进米缸的最先出一样..。



~

#18240631857# C语言函数调用时栈中内存的变化 - ******
#臧怡# 程序中,一个函数是一个过程,这个过程可以分为包括传入参数、过程代码、返回三部分构成.由于一个函数过程需要用到内部变量、临时变量等,所以需要在进程空间的栈空间分配一段存储片段来存储函数过程中的这些参数,该内存片段即为...

#18240631857# Java中为什么栈运行 - ******
#臧怡# ava Virtual Machine Stacks,线程私有,生命周期与线程相同,描述的是Java方法执行的内存模型:每一个方法执行的同时都会创建一个栈帧(Stack Frame),由于存储局部变量表、操作数栈、动态链接、方法出口等信息.每一个方法的执行...

#18240631857# java中堆与栈的区别 - ******
#臧怡# java的内存分为两类,一类是栈内存,一类是堆内存.栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量也将随之释放.堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据,例如,使用new创建的对象都放在堆里,所以,它不会随方法的结束而消失.方法中的局部变量使用final修饰后,放在堆中,而不是栈中.

#18240631857# 函数调用过程中栈到底是怎么压入和弹出的 - ******
#臧怡# 调用时:-将断点程序指针压入堆栈-将3,2,1顺序压入堆栈,并指定参数变量指针到堆栈,参数存放位置即为参数变量位置-压栈保存现场-执行函数-弹栈恢复现场-堆栈指针减掉参数占用字节数,舍弃堆栈中的参数-弹栈断点程序指针加上调用语句字节数继续执行

#18240631857# C语言编译问题 - ******
#臧怡# 1:一般而言C++兼容C,但严格的说C不是C++的子集.例如 int* p = malloc(10 * sizeof(int)); // C语言中正确,C++中不正确 int* p = (int*)malloc(10 * sizeof(int)); // C语言中正确,C++中也正确 2:楼主的2.3问题归根结底你要看一门课:编译原理 ...

#18240631857# C语言的返回值返回到什么地方了? - ******
#臧怡# 这个是运行时存储空间的问题,在你调用的一个函数的时候.有一个叫做活动记录的概念.以下是活动记录的概念: 一个过程的一次执行所需信息的管理,是通过使用一个所谓活动记录的连续存储块来实现的.在PASCAL和C语言中,我们通常...

#18240631857# 在.NET程序运行过程中,什么是堆,什么是栈 - ******
#臧怡# 栈和堆的区别堆栈空间分配栈(操作系统):由操作系统自动分配释放,存放函数的变量值,局部变量的值等等,其操作方式类似于数据结构中的栈;堆(操作系统):一般由开发者分配释放,若不释放,程序结束时可能会有OS回收,分配方...

#18240631857# 怎么理解“在栈中第一个进栈的是被调用函数下一行的内存地址”? - ******
#臧怡# 函数调用前和调用后系统通用寄存器值会发生变化,尤其是程序指针会随执行程序或函数的不同而发生改变,当函数执行完后需要返回原来的位置继续执行,所以需要通过栈来保存调用前的程序指针. 而调用的开始就是让程序指针转向被调用的代码,在转向之前当然要先保存程序指针,不然怎么回来继续执行?而回来后继续执行哪里?就是你说的“被调用函数下一行的内存地址”啦.(虽然你描述不准确,但意思差不多)

#18240631857# 堆栈是计算机那个层面的概念啊,有点搞不清了 - ******
#臧怡# 我感觉平常说的堆栈有两个层面.第一就是说数据结构里面的堆栈,由于特殊的需要创造了一种先进后出的结构.第二就是程序执行时候的堆栈,比如A过程调用B过程,执行的时候是先把B过程需要的参数压入栈中,再把B过程之后的下一条指令的地址压入栈中以便程序知道B过程执行完之后要返回到哪里,然后执行B过程的第一条指令.B过程从栈中读取传递进来的参数来运算,B过程运行完毕,通过读取保存在栈中的地址返回到A过程中.

#18240631857# 装入和卸载可执行程序必须用到栈么 - ******
#臧怡# 对应用程序来说栈空间是不需要申请的,直接就可以拿来使用,而堆空间,是需要向操作系统申请的对window下面的可执行程序来说局部变量,是在栈上分配的,每一个应用程序在被装入内存的时候,操作系统都会为这个应用程序分配一个栈...

  • 求操作系统大神赐教:中断时PSW和PC为什么在系统栈和响应PCB中都存一遍...
  • 答:将这些在系统栈中临时保存的寄存器进一步保存在【被中断进程】的PCB中(每个进程专有的内存页面,驻留在内存中,不会发生缺页错误中断),并且将这些临时保存的信息在系统栈中删除(防止系统栈溢出),之后中断服务程序继续处理引起中断的I/O 参见《现代操作系统》1.3.4节 2.1.6节 5.1.5节 ...

  • linux为什么需要内核栈,系统调用时直接使用用户栈不行吗
  • 答:在空气中喷出

  • 栈和队列可不可以使用散列存储
  • 答:栈和队列都属于一位链表,栈是后进先出,进和出都是在同一端进行,就好像一筒羽毛球,只有把上面拿出来,下面的才能拿出来;队列是先进先出的,进和出分别在不同的端进行,比如排队的人,排在前面的人先到柜台办理业务,后面来的人后得到服务。栈作为一种数据结构,是一种只能在一端进行插入和删除...

  • xmega栈溢出
  • 答:2. 控制每个函数中使用的局部变量数量和大小,确保栈空间足够存放。3. 避免递归调用,或者在递归调用时使用尾递归优化来减少栈空间的使用。4. 如果需要使用大量的栈空间,可以考虑使用堆内存或者静态分配的全局变量来替代栈空间的使用。5. 在程序开发过程中,可以使用调试工具检测栈溢出问题,并针对性地...

  • 在什么情况下可以用栈来存储数据?
  • 答:当本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中的下一条指令,程序由该点继续运行。堆:一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容有程序员安排。6.存取效率的比较 char s1[] = "aaaaaaaaaaaaaaa";char *s2 = "bbbbbbbbbbb...

  • 栈空间是什么意思?
  • 答:除了函数调用,栈空间还经常被用于储存临时的数据。一些编程语言,比如 Python 和 Ruby,也会使用栈作为运行时数据结构存储的基础。尽管栈空间容量有限,但是由于其可以快速分配和释放内存,以及对于数据的存取速度比堆空间更快,因此在一定条件下,使用栈空间可以带来更高的程序性能。

  • java语言中提及的“堆”主要有什么用?“栈又有什么用?”
  • 答:从堆和栈的功能和作用来通俗的比较,堆主要用来存放对象的,栈主要是用来执行程序的.而这种不同又主要是由于堆和栈的特点决定的: 在编程中,例如C/C++中,所有的方法调用都是通过栈来进行的,所有的局部变量,形式参数都是从栈中分配内存空间的。实际上也不是什么分配,只是从栈顶向上用就行,就好像工厂中的传送带(...

  • C语言中函数是如何存储的
  • 答:1. 代码本身是存储在内存的代码段中的,而函数没有说存储的概念,函数调用时是通过栈来实现的。2.在函数体内声明的变量在默认情况下都是auto存储类型 在代码块之间传递信息的一种方法就是使用外部变量。当一个变量在函数的外部被声明时,安的存储空间是永久分配的,安人存储类型是extren.外部变量的声明...

  • 堆栈段在程序中的作用
  • 答:分类: 电脑/网络 >> 程序设计 >> 其他编程语言 问题描述:初学微机,每次编写程序时总要加入堆栈段,但是我不知道它在程序运行起什么作用。望指教!解析:因为CPU要使用堆栈,主要是子程序调用call和ret指令,使用堆栈来存储返回地址,调用子程序的时候,后调用的子程序先返回,而且还可能嵌套调用甚至递归...

  • 进程切换时所要保存的处理机状态信息有哪些
  • 答:进程切换时所要保存的处理机状态信息有进程当前暂存信息。进行进程切换就是从正在运行的进程中收回处理器,然后再使待运行进程来占用处理器。 这里所说的从某个进程收回处理器。实质上就是把进程存放在处理器的寄存器中的中间数据找个地方存起来,从而把处理器的寄存器腾出来让其他进程使用。

    为传递更多家电数码信息,若有事情请联系
    数码大全网