龙空技术网

程序中堆和栈的区别!#linux

资深嵌入式工程师 57

前言:

而今大家对“程序 堆”大概比较讲究,我们都想要学习一些“程序 堆”的相关内容。那么小编同时在网上汇集了一些有关“程序 堆””的相关资讯,希望大家能喜欢,同学们一起来学习一下吧!

程序中堆和栈的区别。

说一下程序里堆和栈的区别,栈是由系统自动分配的。例如声明一个局变量,就比如说这个里边int b,这个就是在栈里边申请的。堆是需要程序员自己申请,并且在申请时需要指定大小,也就是用malloc函数去申请空间的时候,就是在堆区申请的。

然后你看这个P1等于char"malloc(10),这个就是申请出来这块空间就是在堆区。另外堆和栈的区别还有一个就是堆是向高地址连续的数据结构,是不连续的内存区域。也就是说在堆区申请一个,申请一块内存是不连续的。

也就是说不连续的好处就是灵活性比较大,就在现有的空间里边,把要申请的内存给你找够就行了。但是栈不行,是一块连续的内存区域,因为这就是由他们特性所决定的,所以栈顶的地址和栈的最大容量就是系统,就是由系统预先规定好的。如果申请的空间超过栈的剩余空间的时候就会提示报错,然后这也会申请不成功。

另外一个就是申请时候的速度的限制,堆是用malloc,是用美malloc语句去开辟出来的。一般速度是比较慢的,而且容易产生内存碎片,用起来不是特别方便。栈是由系统自动分配速度快,但是这带来的问题就是无法去控制它。

标签: #程序 堆