文章目录
前言
在运行程序之前或者在运行程序的时候,变量和函数会在哪种类型的内存空间存储。
一、为什么要划分内存四区
设置不同区域存放的内存,赋予内存不同的生命周期,给我们更大的灵活编成。
总结:为了管理变量的生死
二、内存分类
1.代码区
1.在程序运行之前便存在
系统经过编译之后,便生成可执行程序,为.exe的文件,未执行程序之前便生成该区域
2.存储的内容为机械指令
3.代码区是共享并且只读的
共享的目的是为了节省空间,通过只存一份代码,在执行代码的时候总是读取这一份代码便可以了,不需要每一次按都自己生成一份新的东西运行。
共享:就是硬盘里面存的.exe文件,在点击之后跳转到代码区运行
只读的目的是为了方式篡改源码,对于源码来说,无论是那种语言,都步推荐修改源码。
2.全局区
1.在程序运行时(或者说之前)便存在
在执行的时候,首先为全局变量分配内存空间
2.存在的内容
常量区,字符串常量和其他常量(const修饰)。特别的局部常量不放在这里。
3.生命周期固定,或者说该区域的数据由操作系统释放
3.栈区
1.在程序运行后存在
在分配完全局变量之后,便生成一个栈区,用来存放函数的参数值和局部变量
特别需要注意的一件事情:不能够返回局部变量的地址
因为编译器的能力,只允许读取一次局部变量的返回
返回局部变量时非法操作
3.堆区
1.在程序运行后存在
并不是每一个程序运行便存在的一个区域,当程序员生成的时候,才会由这个区的使用
2.由程序员分配释放,如果程序员不是释放便在程序结束时释放。
只分配不释放也是非法操作,程序的规范能避免很多的问题。
相对于栈区来说,就是能够返回堆区变量的地址(这个部分有关于指针的理解。)