大多数主流的语言或运行环境都支持3种最基本的内存分配方式,它们分别是:
- 静态分配。静态变量和全局变量的分配形式。我们可以把静态分配的内存看成是家用的耐用家具。通常,它们无须释放和回收,因为没人会天天把大衣柜当作垃圾扔到窗外。
- 自动分配。在栈中为局部变量分配内存的方法,栈中的内存可以随着代码块推出时出栈操作被自动释放。这类似于家中串门的访客,天色一晚就要各自回家,除了个别不识时务者以外,我们一般没必要把客人捆在垃圾袋里扫地出去。
- 动态分配。在堆中动态分配内存空间以存储数据的方式。堆中的内存块好像我们日常使用的餐巾纸,用过了就得扔到垃圾箱里,否则屋内就会满地狼藉。像我们这样的懒人做梦都想有一台家用机器人跟在身边打扫卫生。在软件开发中,如果你懒得释放内存,那么你一个需要一台类似的机器人--这其实就是一个由特定算法实现的垃圾收集器。也就是说,下面提到的所有垃圾收集算法都是在程序运行过程中收集并清理费旧“餐巾纸”的算法,他们的操作对象既不是静态变量,也不是局部变量,而是堆中所有已分配的内存块。