# 代码区、常量区、全局区和栈区之间的分别?
代码区、常量区、全局区和栈区之间的分别?
首先弄清:
局部变量——函数体内的变量
全局变量——函数体外定义的变量
静态变量——static int a = 10
常量:
字符串常量——“hello world”
const修饰的全局变量——const int b =10
const修饰的局部变量——const int b =10
代码区:存放程序的代码,即CPU执行的机器指令,并且是只读的。
全局区:静态变量和全局变量的存储区域是一起的,一旦静态区的内存被分配, 静态区的内存直到程序全部结束之后才会被释放
**注意:**如图
栈区:存放函数内的局部变量,形参和函数返回值。栈区之中的数据的作用范围过了之后,系统就会回收自动管理栈区的内存(分配内存 , 回收内存),不需要开发人员来手动管理。栈区就像是一家客栈,里面有很多房间,客人来了之后自动分配房间,房间里的客人可以变动,是一种动态的数据变动
**注意:**不要返回局部变量的地址,如图:
堆区:由程序员调用malloc()函数来主动申请的,需使用free()函数来释放内存,若申请了堆区内存,之后忘记释放内存,很容易造成内存泄漏
**注意:**在C++中主要用 关键字new 开辟内存,free()函数来释放内存,如图