内存中的‘堆’和‘栈’
我们主要讲内存上的堆区和栈区,数据结构中的堆和栈不作分析
理解:
- 栈区:栈上分配的内存空间是连续的,主要用来存放函数内部的局部变量以及函数参数等,栈由操作系统自动分配,自动释放,生命周期很短,函数调用完,栈就会立马被释放,且栈中不宜存放大量数据,可能会出现栈溢出的问题。
- 堆区:一般由程序员手动分配空间手动释放,在C语言中用malloc,realloc,calloc函数来开辟动态内存空间,在Java中用new关键字来开辟,C语言中用free()手动释放空间后,要记得对指向该内存空间的指针置空,不然会出现野指针(上一篇博客有详解)的问题,若程序员不释放,事后可能会由操作系统回收(最好还是自己手动释放,以免引起不必要的问题),Java中有垃圾回收机制。
- 全局区(.data和.bss):存放全局变量以及static修饰的静态变量,分为已初始化数据和未初始化数据,程序结束时就会被释放,全局变量和局部静态变量数据经常放在数据端(.data),未初始化的全局变量和静态变量一般放在叫(.bss)段里
- 只读常量区:常量字符串就是放在这里的,程序结束时被释放
- 代码区(.text):存放程序源代码编译后的机器指令