Questions tagged «stack»

LIFO(后进先出)数据结构。

9
我了解堆栈指针是什么-但是它的作用是什么?
堆栈指针指向堆栈的顶部,该堆栈以我们所谓的“ LIFO”为基础存储数据。偷别人的比喻,就像是一堆盘子放在顶部放在盘子里。堆栈指针OTOH指向堆栈的顶部“盘”。至少对于x86如此。 但是,为什么计算机/程序“关心”堆栈指针指向的内容呢?换句话说,拥有堆栈指针并知道其指向服务的目的是什么? C程序员可以理解的解释将不胜感激。
11 stack  x86 

4
调用堆栈是从底部开始还是从顶部开始?
堆栈是自底向上堆积的东西。 因此,当调用函数时,调用堆栈会在堆栈上添加新的项目,并且随着每个函数的结束从堆栈中删除项目,直到堆栈为空,然后程序结束。 如果上述正确,那么为什么人们会提到控件将调用堆栈“上移”?控制肯定会向下移动到调用堆栈,直到到达底部为止。
11 functions  stack 

2
堆栈结构是否用于异步进程?
埃里克·利珀特(Eric Lippert)对该问题有一个很好的回答,描述了堆栈的用途。我已经了解了一年(通常来说)是什么堆栈以及如何使用堆栈,但是他的部分回答让我怀疑这种堆栈结构在当今以异步编程为标准的情况下是否被较少使用。 从他的回答: 堆栈是在没有协程的语言中延续性的一部分。 具体来说,没有协程的部分让我感到奇怪。 他在这里解释了更多: 协程是可以记住它们所在位置的功能,可以暂时控制另一个协程的功能,然后在稍后中断的位置恢复,但不一定是在所谓的协程产量之后立即执行。想想C#中的“收益回报”或“等待”,它们必须记住当请求下一项或异步操作完成时它们在哪里。具有协程或类似语言功能的语言需要比堆栈更高级的数据结构才能实现延续。 就堆栈而言,这是极好的选择,但是当堆栈太简单以至于无法处理需要更高级数据结构的这些语言功能时,我将不得不回答的问题是什么? 随着技术的进步,堆栈会消失吗?用什么代替它?它是混合类型的东西吗?(例如,.NET程序是否使用堆栈,直到遇到异步调用,然后切换到其他结构,直到完成,此时堆栈才退回到可以确定是否有下一个项目的状态,依此类推? ) 这些场景对于堆栈而言太高级了,这是很合理的,但是什么能代替堆栈呢?几年前,当我了解到这一点时,堆栈就在那里了,因为它闪电般快速且轻巧,因为它支持对即将完成的任务进行高效管理(双关语?),所以它在应用程序中从堆分配了一块内存。有什么变化?
10 stack 

2
堆栈限制
最近,我在三个具有不同操作系统的设备上测试了堆栈的限制(按限制,我的意思是堆栈可以具有的最大级别数),并且我注意到,每次达到2 ^ 16级别时,它都会给我溢出错误,当我放2 ^ 16-1时,它可以正常工作。 所以我的问题是-是这样吗?根据定义,堆栈是否具有最大限制2 ^ 16-1还是取决于操作系统?
10 stack 



8
数组和堆栈有什么区别?
根据维基百科,一个堆栈: 是后进先出(LIFO)抽象数据类型和线性数据结构。 而数组: 是由一组元素(值或变量)组成的数据结构,每个元素均由至少一个数组索引或键标识。 据我了解,它们相当相似。那么,主要区别是什么?如果它们不相同,那么数组不能做什么,而栈不能做什么呢?

3
一个很好的C可变长度数组示例[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 这个问题在SO上引起了不小的反响,所以我决定在那里删除它,然后在这里尝试。如果您认为它也不适合此处,请至少对如何找到我所追求的示例提出建议... 您能举个例子吗,使用C99 VLA相对于当前的标准堆(使用C ++ RAII机制)提供了真正的优势? 我遵循的示例应: 与使用堆相比,可轻松实现(可能达到10%)的性能优势。 没有一个好的解决方法,它根本不需要整个数组。 实际受益于使用动态尺寸,而不是固定的最大尺寸。 在正常使用情况下,不太可能导致堆栈溢出。 足够强大,足以吸引需要性能的开发人员在C ++项目中包含C99源文件。 在上下文中添加了一些说明:我的意思是C99所指的VLA,但不包括在标准C ++中:int array[n]这里n是变量。在一个用例示例中,我胜过其他标准(C90,C ++ 11)提供的替代方案: int array[MAXSIZE]; // C stack array with compile time constant size int *array = calloc(n, sizeof int); // C heap array with manual free int *array = new int[n]; // …
9 c++  c  stack  heap 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.