关于C语言中的存储区划分以及相关内容

来源:互联网 发布:crm数据分析师招聘 编辑:程序博客网 时间:2024/05/17 02:04

首先,我写的东西是一些简单基础的内容,大神勿喷。

存储区划分

C语言中得存储区划分:代码区,常量区,静态区,栈区, 堆区。

如下图:


(1)代码区

代码区一般都是存储编译后的代码的二进制。其内容相对较容易。

(2)常量区

1.常量区,顾名思义就是存放常量的区域,常量区中主要是存放常量的 其关键字是const

例如:const int a = 5 ;

2.存放在常量区的常量 ,其值是只读 不可写的 也就是说其被赋值之后就不能再被改变

例如://  char arr[] = "zhoujielun";
arr[0] = 'Z';//此处是复制了常量区的字符串  所以可以改变
char *arr1 = "zhoujielun";
arr1[0] = 'Z'; //用指针指向常量区的字符串 通过指针修改字符串  常量区的常量是不可以改变的

(3)静态区

静态区也叫全局区

1.静态区存放的是被static修饰定义的静态常量还有在主函数main()外边定义的全局变量。例如:static int a1 = 5 ;

2.静态区的变量只能初始化一次,如果不给初始值 系统会赋值给零。

3.静态区中得内容程序运行结束之后才被释放。

(4)栈区

1.栈区中存储的是局部变量和函数参数。

2.栈区的特点:先进后出(从高到低分配,从低到高使用)。如下图:

3.栈区是系统自动分配和释放的,其内存是非常小的。

4.栈区的错误用法:


(5)堆区

1.堆区是由程序员手动的分配和释放的 ,它的内存空间比较大。

2.动态分配函数:

char *arr = malloc(8);//分配内存

arr = "iPhone";

3.动态释放函数:void free(void *);

free(arr); //释放内存   内存都是标记释放。

一般 malloc函数与free函数是一起使用的。

4.其他内存分配函数

(1)void * calloc(unsigned n,unsigned size);
分配n个size⼤大⼩小的空间,
并且把该内存上的所有字节清零。
(2)void *realloc(void *p,unsigned newSize);
按给定的地址以及给定的⼤大⼩小重新分配

内存操作函数
1.初始化内存

2.内存拷贝

3.内存比较



 

0 0
原创粉丝点击