这两天阅读了第11章——内存管理和指针。
这个内容我以前从没有接触过,并且这章比较长,反复看了四遍,觉得有点懂了。指针是怎么回事?引用是一个类型的类型安全的指针?委托是方法的一个指针?
值类型存储在堆栈上。引用类型的变量名存储在堆栈上,而其实例存储在堆栈上。
垃圾收集一般有两种方法:一是析构函数;一是IDisposable接口的Disposable()方法。
由于析构函数收集不用的资源具有不确定性,我们不知道什么时候垃圾收集器工作,所以对一些宝贵的资源,我们一般使用Disposable()方法释放资源。
垃圾收集器会对托管资源进行收集,但是未托管的资源需要使用Disposable()方法进行收集。
C#中使用关键字unsafe编写不安全的代码,而指针在C#中是不安全的,所以必须要在使用指针的地方使用unsafe。
类,结构,方法的参数等都可以标记unsafe,但是局部变量不能标记。
使用类型+*的语法来声明指针,比如声明一个整形指针int*;
&表示“取地址”,即把一个值类型转换为指针,也成为寻址运算符。
*表示“获取地址的内容”,与&相反,也成为“简介寻址运算符”或“取消引用运算符”。
指针占用4个字节。
不同指针之间可以进行显式的转换。
指针的类型还可以是void。
指针可以进行运算。
sizeof运算符,它返回该类型占用的字节。
可以声明结构指针,指针成员访问运算符为->。
不可以声明类指针,但可以为类的值类型成员声明指针。在必须放在fixed(这里声明指针)块中。
可以使用关键字stackalloc在堆栈上分配一定量的内存。