一、静态内存/栈内存与动态内存
一个对象是一块特定类型的能存储数据的内存空间。在程序执行中一个对象占用一块内存而被创建,而后在某个时间被销毁,这个过程称为它的生命周期。这里把命名了的对象称为变量。
有一些变量在程序运行之前编译器就会为他们分配内存,因为他们占用的内存是可预期的(如某个编译器下int固定占32位),这些变量称为静态变量,我们在静态内存中为他们分配空间。这类对象包括:
- 局部static对象
- 类static数据成员
- 全局变量
这类对象的共同特征是一旦被声明就会直到程序结束时才被销毁。
栈内存用来存放函数内的非static对象,在运行其存在的程序块时才会为它们分配空间,而在离开其作用域时会被销毁。
以上两类都可以在运行前确定一个变量需要的空间大小,而有一些变量只有在运行时才能确定需要多少内存空间,比如说:
//输入数字n并且创建大小为n的数组。
int n;
cin >> n;
int *p = new int[n];
这时候我们就需要动态内存:以动态的大小地分配空间给变量,这是静态内存和栈内存不能做到的。在C++中我们可以使用new和delete来给对象分配内存和向计算机归还内存。
动态内存允许程序员动态地申请所需空间,但也要求他们一旦不需要这些内存资源的时候就归还他们。把内存归还给计算机是非常重要的,否则就会造成无意义的内存占用导致内存泄漏。尽管归还