堆是用来申请不连续内存的数据区域,比如链表,地址不连续,而是通过指针串在一起形成一个连续的结构,c语言中用malloc函数申请的内存都在堆上,申请过不用时记得要用free函数释放掉,不然内存泄露。
而栈的速度比堆的快,数组和局部变量都是在栈上分配,效率比较高。
另外还有自由存储区、全局/静态存储区和常量存储区,此处不一一讲解了。
在启动文件里都要设置堆和栈的大小,这样合理的分配才不会造成资源的浪费。假如你代码中使用的链表占用空间比较大,这时你就需要把堆设置大一点。假如你使用的数组比较大,就得把堆设置大一点。最简单的方法可以测试一下栈大小,定义一个很大的数组int a[m]; m足够大时就会栈溢出。
想更多的了解c语言具体内存分区的话去百度吧,就帮你到这里了
温馨提示:内容为网友见解,仅供参考