快讯

初探c#(二)自动化的内存管理

2004-02-14 09:34  出处:PConline  作者:依栏望海  责任编辑:pjl 

  在一个test类里,俺用了一个循环,对stack类的实例的Push方法赋值十次。于是,Push创建了Node的十个实例(instance)。然后用Pop把它们显示出来。其顺序正好与创建的顺序相反。   这个例子相当的好,是stack的一个典型,也很好的表述了自动内存管理的机制。但也不好懂,好在这一节不是写给毫无基础的网友看的。   俺自个都花了几分钟看明白,各位大虾更是没问题。   其实,当显示完了“10”以后,就会有一个Node的实例符合被释放的条件,但垃圾收集器并不一定会这样做。 也就是说,它的行为并不确定(这和java一样,俺猜)。有时候,这种行为会带来一些负面影响。起码是性 能降低。自动内存管理本身也是有问题的。因为它很难管理一些特殊情况。有一些关于java的垃圾收集器的 文章也有提到。m$也不会好得了多少。所以,m$有个不安全代码的术语(unsafe code),用来为高级用户服 务。即,用户可以不采用垃圾收集器。但必须用“unsafe”关键字显式声明之。这样就避免了用户不经意以 外使用不安全代码。下面是一个例子:*/ using System; class Test { unsafe static void WriteLocations(byte[] arr) { fixed (byte *p_arr = arr) { byte *p_elem = p_arr; for (int i = 0; i < arr.Length; i++) { byte value = *p_elem; string addr = int.Format((int) p_elem, "X"); Console.WriteLine("arr[{0}] at 0x{1} is {2}", i, addr, value); p_elem++; } } } static void Main() { byte[] arr = new byte[] {1, 2, 3, 4, 5}; WriteLocations(arr); } } /* 俺对这个例子不是很满意,也让俺有点迷惑,有机会再自己写一个。很简单,只是可以用指针了!万岁! 其实,俺对这一节最没有把握了!有不少地方都不能自圆其说!所以,请各位大虾大力批评。*/
键盘也能翻页,试试“← →”键
IT热词搜索 来源:360新闻
软件论坛帖子排行
相关文章

相关软件:

腾讯QQ2012
大小:52.93 MB 授权:免费
腾讯QQ2012
立即下载
腾讯QQ2013
大小:49.32 MB 授权:免费
腾讯QQ2013
立即下载