C语言基础知识之(十七):内存的分区:栈区,堆区,静态区(全局区),常量区,代码区

时间:2022-05-14 16:17:29

一、内存分区种类

计算机内存划分为5个区,地址从高到底依次是:栈区,堆区,静态区(全局区),常量区,代码区。

如:

int a = 10; //变量a存储在栈区

char *s ="iPhone"; //指针s指向常量区“iPhone”

打印地址:栈区的地址比常量区的地址大。

printf("%p\n",&a);

printf("%p\n",s);

二、由系统分配和回收的内存区的主要特点

栈区:

1、局部变量:在函数、分支、循环的{}中定义的变量

2、栈区内存的管理方式:由系统赋值分配和回收。

3、定义变量时分配,当管理局部变量的代码段执行结束后,内存被回收。

4、内存被回收后,原来存储的数据没有被清空。内存只是标记删除或回收。

5、栈存储的特点:先进后出,后进先出。

6、入栈、出栈。入栈:定义变量,在栈区分配储存空间,存储数据。出栈:回收内存。

7、栈底,栈顶。栈底:栈区内存的起始位置。栈顶:后放进去的数据在栈顶。

8、局部变量没有初始化,变量不会自动设置为0,内存原来遗留的是什么变量的内存就是什么。


堆区:

1、由开发人员负责分配和回收的内存区

2、如果没有回收会造成程序泄露,导致程序崩溃。

3、下一节将详细介绍堆内存分配和释放函数


静态区:

1、全局变量、使用static修饰的局部变量,存储在静态区。全局变量和静态变量的存储区域。

2、静态区的内存管理:由系统分配和回收内存

3、回收:程序运行结束时回收内存。

4、静态区变量只能初始化一次,在编译时进行初始化,运行期可以修改值。

5、静态区的变量如果没有设置初始值,默认设为0.

 

常量区:

1、常量区通常被称为文字常量区。(立即数:int a = 10;)

2、常量区的内存管理:由系统分配和回收

3、回收:程序运行结束后回收内存。

4、常量区的数据只能被读取,不能被修改。

 

代码区:函数运行时存储的区域

1、代码区的内存管理:系统分配和回收内存

2、回收:程序运行结束后回收内存。

3、只能读取不能修改。