个人认为楼上的不懂C语言堆栈到底是怎么回事,按楼上说法,只是大概讲了下栈,没有讲堆. 要讲C语言的堆栈,要从计算机的数据内存分配讲起. ____________________ | Stack区(数组,指针,结构体,局部变量) ____________________ | Static变量(静态变量,全局变量) ____________________ | Heep区(堆区) ____________________ | 代码段 ____________________ 从上面示意图中可看出整个内存分配,堆分配是在内存中按块划分,也就是相对与函数malloc,realloc,calloc.这3个函数为内存分配函数.而且需要手动调用free函数释放资源,否则会造成大量的内存碎片. 如果楼主不相信可以自己写一个死循环,内部调用malloc函数,创建N个内存块,运行一段时间后,绝对会造成系统瘫痪,资源被耗尽. 栈区划分为计算机自身划分,即在函数或局部变量被调用时,系统自动为其分配栈,以后进先出为原则实现变量的保存,在函数调用完毕时,系统会自动释放栈内资源,所以,栈可以说是短命的(生存周期只在调用过程中). 这里只是粗略说了下堆和栈,另外再说下static-->静态区,全局变量或静态变量存放于静态区,只要代码中存在静态变量或全局变量,自动放于静态区,静态区存放的变量生存周期是整个程序结束时才释放. 代码段区,顾名思义存放的是程序代码(暂时先这么理解). 原文地址:http://zhidao.baidu.com/question/22906947.html
C语言的数据内存分配
最新推荐文章于 2023-08-02 23:39:15 发布