内存分配有几种方式?堆和栈有什么区别?(申请方式、效率、方向)
1.栈上分配:
在执行函数之前,函数内部的局部变量都可以在栈上创建,函数执行完毕之后会自动释放
2.静态全局存储区
全局变量和静态变量
3.堆上分配
由程序员分配,好比new,free,malloc free
1.申请方式不同:
栈是由操作系统自由分配和释放,堆是由程序员手动申请释放
2.申请大小的限制:
栈是向低地址申请的空间,一块连续的内存,也就是说,栈的大小和地址是由系统预先规定好的,如果申请的空间超过栈的剩余空间就会提示overflow
堆的申请是向高地址扩张的,是不连续的内存区域,这是由于系统使用链表来存储的空闲内存地址
3.申请的效率
栈使用的是一级缓存, 它们通常都是被调用时处于存储空间中,调用完毕立即释放;
堆则是存放在二级缓存中,速度要慢些。