全国统一服务热线

186-7589-7389

新闻中心

当前位置:首页>新闻中心

C++编程开班

堆和栈

存储器里有一块区域叫做栈(Stack),用于存储整形、浮点型、布尔型、字符型等基本数据类型,栈的工作方式类似于弹夹。

我们的加子弹和打出子弹,都在弹夹的顶部操作。栈与此类似,压入和弹出数据的操作总是发生在栈的顶部。

操作系统通过栈指针汇总存储的地址读写栈中的数据,当栈为空时,栈指针指向栈的底部,随着数据的不断入栈,栈指针也不断向栈顶部移动,始终指向栈中的下一块自由空间。

栈对数据的操作总是在栈的顶部进行,较后入栈的变量首先弹出,较先入栈的数据较后弹出,因此,先入栈数据的作用域总比后入栈的要长,后入栈的数据作用域嵌套在先入栈的数据中,栈的这种工作方式称为后入先出(Last In first out,LIFO)。

整型,浮点型,布尔型,字符型等简单数据和结构体存储在栈中,称为值类型变量;

栈有非常高的性能,但栈中变量的生存周期都是嵌套的,有时这种要求过于苛刻,在类中,我们希望构造函数创建成员变量后,即使退出构造函数,这些变量仍然存在,其他函数仍可以使用这些变量,为此C#把类的成员变量存储在堆上;

栈操作的主要方法:

l Push()入栈(添加数据)

l Pop()出栈(删除数据,返回被删除的数据)

l Peek()取得栈顶的数据,不删除

l Clear()清空所有数据

l Count取得栈中数据的个数

Cat Grafield=new Cat(“Grafield”,4);

创建了一个名为cat的Cat类对象,该过程分为两步:

1.系统在堆中划分了一块20字节的空间用于存储Grafield对象的成员变量,并调用构造函数初始化对象的成员变量

2.系统为栈分配了4字节的空间,用于Grafield对象在堆中的首地址,

栈中存储的指向堆中对象的地址为引用,系统通过引用找到堆中的对象。

全部对象都被存储在堆中,数组也被存储在堆中,它们都被称为引用型变量.

从上面的例子可以看出,创建引用型变量比创建值类型变量要复杂得多,虽然它会造成一点性能的损失,但可以对数据的生成周期进行非常大的控制。


QQ咨询
在线咨询
在线报名
186-7589-7389
186-7589-7389
返回顶部