C#指针控制内存管理
2008年2月6日

有时需要精细控制或希望有些许性能提高的程序员来说,C#提供了编写“非安全”代码的能力。这样的代码可以由指针类型直接处理,而且fix对像可以暂时保护这些代码,防止被碎片收集程序收集。从开发者和用户角度来看,这个“非安全”代码属性实际上是“安全”属性。非安全代码必须用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); } }
介绍了名为WriteLocations的非安全方法,它选定一个数组实例并且用指针反复对元素进行操作。每个数组元素的标号,数据和位置写到控制台。这个程序的一个可能的输出为:
arr[0] at 0x8E0360 is 1 arr[1] at 0x8E0361 is 2 arr[2] at 0x8E0362 is 3 arr[3] at 0x8E0363 is 4 arr[4] at 0x8E0364 is 5
但是,准确的存储位置肯定要发生变化。

  • 相关文章:
« 羊羊显示器维修记般若波罗密多心经 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog 1.8 Arwen Build 81206

Copyright 2008-2009 www.xcopy.cn. All Rights Reserved.