- Amdroid Activity 生命周期
- 野指针的产生原因
- 多线程讲讲
- socket tcp和udp
- 堆和栈的区别
- 静态链接库和动态链接库
- 数据结构知道哪些
- vector和map区别
- 链表写一个vector
5. 堆和栈的区别
本来这个问题比较简单;不过为了强化基础还是要温习一下;
首先 堆 和 栈 基本上算法有两个意思吧都:一个是 内存,一个是数据结构
;
5.1 内存
内存分配主要分三种
- 一种是
静态内存分配
。它是由编译器自动分配和释放的,即内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,直到整个程序运行结束时才被释放,如全局变量与 static 变量。 - 另外一种是
栈分配
。它同样也是由编译器自动分配和释放的,即在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元将被自动释放。需要注意的是,栈内存分配运算内置于处理器的指令集中,它的运行效率一般很高,但是分配的内存容量有限。 - 最后一种是
堆分配
。此方法主要需要程序员自己分配和释放,C语言一般对应malloc 和 free。C++ 就是new 和 delete了.也就是说,动态内存的整个生存期是由程序员自己决定的,使用非常灵活。需要注意的是,如果在堆上分配了内存空间,就必须及时释放它,否则将会导致运行的程序出现内存泄漏等错误。
5.1 数据结构
- 栈,先进先出
- 堆,完全二叉树结构