1、堆栈名称释疑
维基百科,(https://zh.wikipedia.org/wiki/%E5%A0%86%E6%A0%88)
堆栈(英文:stack),也可直接称栈。台湾作堆叠镇逗,在计算机科学中,是一种特殊的串行形式的数据结构,它的特殊之处在于只能允许在链结串行或阵列的一端(称为堆栈顶纯孝端指标,英文为top)进行加入资料(push)和输出资料(pop)的运算。另外堆栈也可以用一维阵列或连结串行的形式来完成。堆栈的另外一个相对的 *** 作方式称为伫列。由于堆栈数据结构只御裤卖允许在一端进行 *** 作,因而按照后进先出(LIFO, Last In First Out)的原理运作。百度百科,(http://baike.baidu.com/view/93201.htm)
在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。要点:堆,顺序随意。栈,后进先出(Last-In/First-Out)。可以发现,“堆栈”之所以出现,是因为早期翻译不严谨的缘故。两种数据类型。
2、线程与堆、栈
与线程“绑定”的是栈,用于存储自动变量。每一个线程建立的时候,都会新建一个默认栈与之配合。堆则是通常与进程相关,用于存储全局性的变量,进程建立的时候,会建立默认堆。于是,每一个线程都有自己的栈,然后访问共同的堆。当然,你可以通过OsApi建立其他堆栈。
堆是用来申请不连续内存的数据区域闷陆搭,比如链表,地址不连续,而是通过指针串在一起形成一个连续的结构,c语言中用malloc函数申请的内存都在堆上,申请过不用时记得要用free函数释放掉,不然内存泄露。
而栈的速度比堆的快,数组和局部变量蚂拿都是在栈上分配,效率比较高。
另外还有自由存储区、全局/静态存储区和常量存储区,此处不一一讲解了。
在启动文件里都要设置堆和栈的大小,这样合理的分配才不会造成资源悉誉的浪费。假如你代码中使用的链表占用空间比较大,这时你就需要把堆设置大一点。假如你使用的数组比较大,就得把堆设置大一点。最简单的方法可以测试一下栈大小,定义一个很大的数组int a[m]m足够大时就会栈溢出。
想更多的了解c语言具体内存分区的话去百度吧,就帮你到这里了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)