您所说的栈,是由操作系统负责管理的一段栈空间,在递归、子程序调用等处应用广泛。这是操作系统的范畴。
——并不是在C语言范畴讨论的概念。
数据结构里堆和栈,原理差不多都是先进后出,但是堆一般是一个二叉树,是非线性,比如堆排序。栈往往是线性。C语言里堆和栈是操作系统对内存管理实现的两个不同部分。
栈空间是操作系统自己管理,分配,释放也是操作系统做。普通局部变量都存在栈里。
堆区的空间是用户自己分配管理,比如每一次malloc必须自己free。要不然操作系统不会帮你释放。
C语言还有一个代码段,这个区域程序执行后不可写,一般用来存储常量。
答案是会的:系统分配给每个程序的栈空间是有限的,超过了就会堆满。最有代表性的就是递归函数,如果递归的深度达到一定量,程序栈就会满,程序就会异常退出,之前使用快速排序用到递归,当数据量比较大,数据基本有序时递归深度就比较大,程序就停止了,调试错误显示栈资源不足。