转载

当我们声明一个变量,如:
int i;
或者一个对象,如:
A a;
那么系统就会根据它们的类型自动开辟出一块内存空间用来保存它们的数据。如:
int i; i = 4;
int型变量要占用4个字节的内存的空间,所以系统自动开辟出4个字节的内存空间,然后将4保存在这个4个字节的内存空间中。
但是这里有个问题,就是系统是在哪里开辟的空间?系统会自动在栈中为每个变量开辟内存空间,以保证数值被合理地存放。
由于栈是系统自动分配的,因此速度较快。但其缺点是可存放的空间比较小,只有2MB,假如我们要存放比较大的数据,显示栈是不行的,那么就得放到堆里,堆是一大堆不连续的内存区域,在系统中由链表将它们串接起来,因此它可存放的空间可以很大,关于它们在执行效率以及申请方式上的区别。我们还要在数组中详加讨论,这里我们只需要了解它们的两个基本不同点:
1:栈由系统自动分配内存,堆要程序员进行申请。
2:栈中空间比较小,只有2MB,堆得上限是由系统中有效的虚拟内存来定的,因此获得的空间比较大。
使用NEW运算符来建立一个堆,例程如下:
#include
using namespace std;
class A
{
public:
A(){cout