浅谈C语言的存储区

原创 2015年11月20日 20:32:48

C语言中存储区大体上分为三个


    

静态存储区:

 静态存储区是用来存储静态变量和全局变量或者常量字符串的位置,在代码中声明一个全局变量,则必须在所有代码块之外声明,它的生命周期从代码开始执行到结束;若在声明一个变量的时候在前面加上static关键字,则说明该变量是个静态变量,他的生命周期是从声明开始到代码运行结束;还有一种存储在静态区的常量,称为字符串常量,如果定义了一个字符串常量则说明它是不可被改变的。

栈区:

栈区是用来存数函数的参数和局部变量,更具体点说是编译器在代码运行是在运行时堆栈上对变量进行内存的分配,内存的分配是连续的,栈区上给变量分配内存的特点就是高速有效,但是栈区的容量有限不能对所有的变量都在栈区上开辟内存空间,如果在栈区上开辟的内存超出了栈区的容量就会产生栈溢出。

堆区:

堆区是留给程序员在需要的时候申请内存空间的时候用的,通常我们用malloc、relloc、new等的函数进行内存的申请,但是要用相应的free、delete等函数对申请到的内存在使用完后进行释放,如果不进行释放的话,所申请的那块内存空间就会被浪费,你不再使用 但是别人也申请不到,堆区的具体由操作系统管理。



举例说明:

<span style="font-size:18px;">#include<stdio.h>
#include<stdlib.h>

int b = 2;     //定义在所有代码块之外  属于全局变量  在静态存储区
static int c = 5;   //静态全局变量   当然也是在静态区
void fun(int m, int n)     //函数的参数  在函数被调用时在运行时堆栈上开辟空间  存储在栈区
{
printf("this is an example!\n");
}
int main()
{
static int a;        //静态变量
    char *p = (char*)malloc(20);   //指针p是个局部变量 在栈区存储 但是它所指向的空间是通过malloc开辟的是在堆区
int x = 2, y = 3;     //局部变量  栈区开辟内存空间
fun(2, 3);       
return 0;
}
</span>





C语言五大内存分区介绍

C语言分为五大内存分区: 1、栈区(stack): —由编译器自动分配释放,存放函数的参数值,局部变量的值等。 2、堆区(heap): 一般由程序员分配释放,若程序员不释放,程序结束时由系统释放。...

C语言程序的存储区域和编译过程

由C语言代码(文本文件)形成可执行程序(二进制文件),需要经过预处理-编译-优化-汇编-链接五个阶段。 编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能...

C语言变量存储区域 进程内存布局

C程序中,内存通常分为几个大区:共享存储区、栈区、堆区、全局静态区、文字常量区,此外还有程序代码区,其中,全局静态区又可以分为全局非初始化区和全局初始化区,从具体程序中来看,初始化和非初始化的全局OR...

C语言操作WINDOWS系统存储区数字证书相关函数详解

C语言操作WINDOWS系统存储区数字证书相关函数详解及实例   以下代码使用C++实现遍历存储区证书及使用UI选择一个证书   --使用CertOpenSystemStore打开证...
  • webajax
  • webajax
  • 2011年08月18日 17:07
  • 2527

C语言:数据类型、存储区字节数、占位符、sizeof、输入输出、二进制相关、操作符(++,--)、主函数参数

数据类型:         字符类型-------char:256个数字[-128,127]                                             每个数...

C语言操作WINDOWS系统存储区数字证书相关函数详解及实例

C语言操作WINDOWS系统存储区数字证书相关函数详解及实例  以下代码使用C++实现遍历存储区证书及使用UI选择一个证书   --使用 CertOpenSystemStore打开证书存储区....

c语言变量存储区

高内存地址 -------------------------------------- 堆栈段 堆 BSS (uninitialized global variables, uninitia...
  • samfang
  • samfang
  • 2011年03月14日 17:11
  • 515

C语言程序内存中:静态存储区、堆、栈的区别

转载自:http://blog.csdn.net/ccccdddxxx/article/details/7085165

【C语言提高05】静态存储区

#include#include #include char* getStr1() { char*p1 = "abcdefg"; //开辟的空间属于全局区 return p1; } //这两个字...

c语言之栈存储区和堆区理解

栈:就是迟到早退、先进后出;内存的分配、释放管理都是由系统自己完成,不需要自己管理; 堆:是由自己动态申请的,如果不释放,会一直存在的;申请内存的时候会用到关键字mallco 下面是一个堆的申请返回和...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈C语言的存储区
举报原因:
原因补充:

(最多只允许输入30个字)