堆内存和栈内存
前言 在项目里边由于要专门开辟非常大的空间,因此最近又特意回顾了下堆内存和栈内存。 正文 首先先简单回顾一下什么是堆、什么是栈: 堆:堆分为全局堆和局部堆。全局堆是所有没有分配的空间,局部堆就是用户分配的空间。堆在操作系统堆进程初始化的时候分配,在运行过程中也可以向系统索要额外的堆,但是用完了要及时free或者delete掉,否则会造成内存泄漏。堆是所有线程共有的空间。 栈:栈是线程独有的,保存其运行状态和局部自动变量的。栈在县城开始的时候初始化,每个线程的栈是互相独立的,每个函数都有其自己的栈空间,栈被用来在函数之间传递参数。操作系统在切换线程的时候会自动切换栈。栈空间不需要在高级语言里面显示分配和释放。 堆和栈的区别: 分配方式的不同 简单来说,栈是由编译器自动分配释放,存放函数的参数值、局部变量的值等。操作方式类似于数据结构中的栈,栈内存处于一段连续的地址区域,并向低地址扩展; 而堆一般由程序员分配释放,如果没有手动释放的话,程序结束时可能由操作系统自动回收,但并不是所有操作系统都会自动回收内存,因此一定要手动释放已分配内存,同时,栈内存的空间是不连续的。 空间大小的不同 .......