您的位置:首页 > 编程语言 > C语言/C++

C语言的数据存储区

2015-10-19 20:25 211 查看
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: