“栈”和“堆”有什么区别?

2024年11月15日 17:16
有4个网友回答
网友(1):

堆和栈都是计算机中的一种数据结构
堆栈(英文:stack),中国大陆作堆栈,台湾作堆叠,在计算机科学中,是一种特殊的串行形式的数据结构,它的特殊之处在于只能允许在链结串行或阵列的一端(称为堆栈顶端指标,英文为top)进行加入资料(push)和输出资料(pop)的运算。这里所讲的堆栈其实就是栈。
而堆是不同于堆栈的。
一个由C/C++编译的程序占用的内存分为以下几个部分
1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。

网友(2):

堆是以逻辑上部分有序的树状数据结构形成的优先队列;栈是先进后出或后进先出队列.

网友(3):

在一块用的“堆栈”其实就是栈区,堆和栈都是来存储数据的,只是存储数据的位置和生命期不一样。
区别:
在程序中,在栈区申请的资源只是在某一函数模块中有效,函数返回栈区资源就会被收回,
在堆区中对于整个程序有效,程序结束在堆区的资源会被收回。

网友(4):

同样是可以自主分配的读写内存,但是栈是由系统按照LIFO来管理的,而堆的话,你得自己管理,也就是说,{ int i;int *p=malloc(sizeof(int));}前一个你不用理,用完之后,自动出栈,而后一个你不Free的话,就会出现内存泄露,泄露的多了,系统就会变慢,再多的话,找不到地址空间进行分配,系统及崩溃了。
打字挺累,有分的话就就散点吧