C语言的数据存储区

C语言分为4个存储区域:

代码区

静态存储区

栈区

堆区


代码区:存放编译后的可执行代码的区域。

 静态存储区:存储着静态变量(static修饰的变量 如:static int a; ) 和一些常量(如 char *p="abcd";  其中的“abcd”就是存储在静态存储区的 并且被认为是只读的)以及全局变量

,全局变量和静态变量在分配内存时会被初始化器初始化为类型0。

栈区:存放函数的形参和局部变量(包括复合类型的局部变量) 例如在main函数中定义一个int a;   编译器就会在栈区分配4个字节给a。

堆区:C语言中用malloc realloc calloc 函数分配的动态内存都在堆区,如 char *p=(char*)malloc(10);   则p为指针,是一个局部变量,在栈区。p所指向的地址为堆区动态分配的空间,堆区由操作系统进行管理(可以认为有一个空闲内存分配表)


举例:

static int a;   //a是静态变量 其空间在静态存储区,占4个字节

int main()

{

int b;   //b是一个局部变量,分配在栈区,本函数结束后被销毁。

char *p1="abcd"  /*p1是一个局部变量 在栈区分配,占4个字节(32位系统下),其值为一个地址,它指向静态存储区的一个常量字符串的首地址,该字符串长度5位 分别是  'a' 'b' 'c' 'd' 'e' '\0' */

int * p2=(int*)malloc(sizeof(int)*10);  /*p是一个局部变量,在栈区分配4个字节(同上),它指向堆区的一个长度为10个int型大小的空间的首地址   */

return 0;

}


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值