谁能帮我说下C语言中的堆栈
个人认为楼上的不懂C语言堆栈到底是怎么回事,按楼上说法,只是大概讲了下栈,没有讲堆。要讲C语言的堆栈,要从计算机的数据内存分配讲起。____________________| Stack区(数组,指针,结构体,局部变量)____________________| Static变量(静态变量,全局变量)____________________| Heep区(堆区)____________________| 代码段____________________从上面示意图中可看出整个内存分配,堆分配是在内存中按块划分,也就是相对与函数malloc,realloc,calloc。 这3个函数为内存分...全部
个人认为楼上的不懂C语言堆栈到底是怎么回事,按楼上说法,只是大概讲了下栈,没有讲堆。要讲C语言的堆栈,要从计算机的数据内存分配讲起。____________________| Stack区(数组,指针,结构体,局部变量)____________________| Static变量(静态变量,全局变量)____________________| Heep区(堆区)____________________| 代码段____________________从上面示意图中可看出整个内存分配,堆分配是在内存中按块划分,也就是相对与函数malloc,realloc,calloc。
这3个函数为内存分配函数。而且需要手动调用free函数释放资源,否则会造成大量的内存碎片。如果楼主不相信可以自己写一个死循环,内部调用malloc函数,创建N个内存块,运行一段时间后,绝对会造成系统瘫痪,资源被耗尽。
栈区划分为计算机自身划分,即在函数或局部变量被调用时,系统自动为其分配栈,以后进先出为原则实现变量的保存,在函数调用完毕时,系统会自动释放栈内资源,所以,栈可以说是短命的(生存周期只在调用过程中)。
这里只是粗略说了下堆和栈,另外再说下static-->静态区,全局变量或静态变量存放于静态区,只要代码中存在静态变量或全局变量,自动放于静态区,静态区存放的变量生存周期是整个程序结束时才释放。
代码段区,顾名思义存放的是程序代码(暂时先这么理解)。PS:本人原创,最近发现一些人盗用本人回答的问题。特此声明。嘿嘿。____________________ _________补充:我对于C#不是很熟悉,而且我也是从事C开发的,对于面向对象语言应用不是很熟。
在这只能给出C 的代码。代码有点长,不知道你能不能看的懂,才写的。
#include #include #include #include #include #include #include /*//基于数组的栈的实现#define N 50typedef struct Stack{ int top; int A[N];}*pStack;//Pop出栈int Pop(pStack pst){ int e; if(pst->top == -1) { coutA[pst->top]; pst->top--;// couttop == N-1) { cout>e; pst->top ; pst->A[pst->top] = e; }}//清空栈void empty(pStack pst){ pst->top = -1;}//判断栈是否为空int IsEmpty(pStack pst){ if(pst->top == -1) { return 0;// couttop == N-1) { return 0; } else { return 1; }}//初始化栈void InitStack(pStack pst){ pst->top = -1;}void main(){ Stack S; InitStack(&S); int n; cout>n; for(int i=0; i>n; for(i=0; iprior = NULL; cout>(*pst)->element; } else { pStack S = (pStack)malloc(sizeof(Stack)); (*pst)->next = S; S->prior = (*pst); S->next = NULL; (*pst) = S; cout>(*pst)->element; }}//判断是否为空int IsEmpty(pStack pst){ if(pst == NULL) { coutprior == NULL) { coutelementelementprior; (*pst)->next = NULL; free(S); return (*pst); }}//初始化栈void InitStack(pStack pst){ pst = NULL;}void main(){ pStack pS = NULL;// InitStack(pS); int n; cout>n; for(int i=0; i { Push(&pS); } pStack S; S = Pop(&pS);}。收起