运行时的5个内存分区
-
栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。(就是由编译器在需要的时候分配,不需要的时候自动清除的变量储存区。)
-
堆区(heap):是一块动态内存区,由程序员分配释放,他们的释放编译器不管,若程序员不释放,则在程序结束后,操作系统自动回收。(如果程序员没有设计释放过程,而是由程序崩溃或者运行结束导致系统回收程序所在的内存,这样很容易造成内存的泄漏。
-
数据区
- 未初始化(bss)
赋初值‘0’ - 已初始化
3.1.全局区:
定义在函数外边的全局变量和静态变量就放在这里,这里的变量在程序启动就被创建,可以自由更改,即由系统管理的可读可写的内存。
3.2.常量区:
常量值系统一运行就被创建,常量区的内存只读的,如:字符串常量(文字常量const)就放在这个区,你可以读,但是不能修改他们,内存由系统管理。
- 未初始化(bss)
-
代码区
代码区是只读的,该区域是用来存放程序代码的,内存由系统管理。
储存时的3个内存分区
数据区 | 代码区 |
---|---|
未初始化和已初始化 | 存放代码 |