# 代码区、常量区、全局区和栈区之间的分别?

代码区、常量区、全局区和栈区之间的分别?

首先弄清:
局部变量——函数体内的变量
全局变量——函数体外定义的变量
静态变量——static int a = 10
常量:
字符串常量——“hello world”
const修饰的全局变量——const int b =10
const修饰的局部变量——const int b =10

代码区:存放程序的代码,即CPU执行的机器指令,并且是只读的。

全局区:静态变量和全局变量的存储区域是一起的,一旦静态区的内存被分配, 静态区的内存直到程序全部结束之后才会被释放

**注意:**如图
# 代码区、常量区、全局区和栈区之间的分别?

栈区:存放函数内的局部变量形参和函数返回值。栈区之中的数据的作用范围过了之后,系统就会回收自动管理栈区的内存(分配内存 , 回收内存),不需要开发人员来手动管理。栈区就像是一家客栈,里面有很多房间,客人来了之后自动分配房间,房间里的客人可以变动,是一种动态的数据变动

**注意:**不要返回局部变量的地址,如图:
# 代码区、常量区、全局区和栈区之间的分别?
# 代码区、常量区、全局区和栈区之间的分别?

堆区:由程序员调用malloc()函数来主动申请的,需使用free()函数来释放内存,若申请了堆区内存,之后忘记释放内存,很容易造成内存泄漏

**注意:**在C++中主要用 关键字new 开辟内存,free()函数来释放内存,如图
# 代码区、常量区、全局区和栈区之间的分别?
# 代码区、常量区、全局区和栈区之间的分别?