栈
局部变量是放在栈中的,操作系统会给每一个进程分配1个固定大小的栈,到底多大不同操作系统分配不同,栈使用简单,不需要申请、释放内存,全是自动完成。进入函数定义局部变量时,系统自动为其分配一个空间,退出函数时就系统就自动回收。但是没有清零。下次其它函数定义变量时,又对上次的空间进行分配。
栈的特点:自动管理、重复使用、空间有限。所以使用栈时要注意如下问题。
- 定义局部变量时需要进行初始化。
- 局部变量的地址不能进行返回或传送,让别人来访问。
- 局部变量不能定义太大,会溢出。
堆
全局变量放在堆中,由操作系统堆管理模块统一管理,各进程按需分配,进程需要时使用malloc向堆管理器申请,使用完成后使用free归还,和栈一样也是重复分配,意味着同样是脏内存。
堆的特点:手动申请释放、重复使用、空间相对较大。