c语言中量存放的位置

应用程序在运行时的内存包括代码区和数据区,其中数据区又包括哪些部分?

参考:对于一个进程的内存空间而言,可以在逻辑上分成3个部份:代码区,静态数据区和动态数据区。动态数据区一般就是“堆栈”。栈是一种线性结构,堆是一种链式结构。进程的每个线程都有私有的“栈”。全局变量和静态变量分配在静态数据区,本地变量分配在动态数据区,即堆栈中。程序通过堆栈的基地址和偏移量来访问本地变量。

 

要讲C语言的堆栈,要从计算机的数据内存分配讲起.

____________________

 

| Stack区(数组,指针,结构体,局部变量)

____________________

 

| Static变量(静态变量,全局变量)

____________________

 

| Heep区(堆区)

____________________

 

| 代码段

___________________

 

从上面示意图中可看出整个内存分配,堆分配是在内存中按块划分,也就是相对与函数malloc,realloc,calloc.这3个函数为内存分配函数.而且需要手动调用free函数释放资源,否则会造成大量的内存碎片.

 

如果楼主不相信可以自己写一个死循环,内部调用malloc函数,创建N个内存块,运行一段时间后,绝对会造成系统瘫痪,资源被耗尽.

 

栈区划分为计算机自身划分,即在函数或局部变量被调用时,系统自动为其分配栈,以后进先出为原则实现变量的保存,在函数调用完毕时,系统会自动释放栈内资源,所以,栈可以说是短命的(生存周期只在调用过程中).

 

这里只是粗略说了下堆和栈,另外再说下static-->静态区,全局变量或静态变量存放于静态区,只要代码中存在静态变量或全局变量,自动放于静态区,静态区存放的变量生存周期是整个程序结束时才释放.

 

代码段区,顾名思义存放的是程序代码(暂时先这么理解).

posted on 2011-05-28 17:49  xuq  阅读(104)  评论(0编辑  收藏  举报

导航