本章内容
C#程序是一组类型声明
类型是一种模板
实例化类型
数据成员和函数成员
预定义类型
用户定义类型
栈和堆
值类型和引用类型
变量
静态类型和dynamic关键字
可空类型
栈和堆
程序运行时,它的数据必须存储在内存中。一个数据项需要多大的内存、存储在什么地方,
以及如何存储都依赖于该数据项的类型。
运行中的程序使用两个内存区域来存储数据:栈和堆。
栈
栈是一个内存数组,是一个LIFO(Last-InFirst-0ut,后进先出)的数据结构。栈存储几种
类型的数据:
某些类型变量的值;
程序当前的执行环境;
传递给方法的参数。
系统管理所有的栈操作。作为程序员,你不需要显式地对它做任何事情。但了解栈的基本功
能可以更好地了解程序在运行时在做什么,并能更好地了解C#文档和著作。
栈的特征
栈有如下几个普遍特征。
数据只能从栈的顶端插人和删除。
把数据放到栈顶称为入栈(push)。
从栈顶删除数据称为出栈〔pop)。
图4-6展示了栈的相关术语。
堆
堆是一块内存区域,在堆里可以分配大块的内存用于存储某种类型的数据对象。与栈不同,
堆里的内存能够以任意顺序存人和移除。图4-7展示了一个在堆里放了4项数据的程序。
虽然程序可在堆里保存数据,但并不能显式地删除它们。CLR的自动垃圾收集器在判断出
程序的代码将不会再访问某数据项时,会自动清除无主的堆对象。我们因此可以不再操心这项使
用其他编程语言时非常容易出错的工作了。图4一8阐明了垃圾收集过程。