欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#通过指针实现快速拷贝的方法

程序员文章站 2022-06-21 09:55:07
本文实例讲述了c#通过指针实现快速拷贝的方法。分享给大家供大家参考。具体实现方法如下: // fastcopy.cs // 编译时使用:/unsafe usi...

本文实例讲述了c#通过指针实现快速拷贝的方法。分享给大家供大家参考。具体实现方法如下:

// fastcopy.cs
// 编译时使用:/unsafe
using system;
class test
{
  // unsafe 关键字允许在下列
  // 方法中使用指针:
  static unsafe void copy(byte[] src, int srcindex, byte[] dst, int dstindex, int count)
  {
    if (src == null || srcindex < 0 ||
      dst == null || dstindex < 0 || count < 0)
    {
      throw new argumentexception();
    }
    int srclen = src.length;
    int dstlen = dst.length;
    if (srclen - srcindex < count || dstlen - dstindex < count)
    {
      throw new argumentexception();
    }
    // 以下固定语句固定
    // src 对象和 dst 对象在内存中的位置,以使这两个对象
    // 不会被垃圾回收移动。
    fixed (byte* psrc = src, pdst = dst)
    {
      byte* ps = psrc;
      byte* pd = pdst;
      // 以 4 个字节的块为单位循环计数,一次复制
      // 一个整数(4 个字节):
      for (int n = 0; n < count / 4; n++)
      {
        *((int*)pd) = *((int*)ps);
        pd += 4;
        ps += 4;
      }
      // 移动未以 4 个字节的块移动的所有字节,
      // 从而完成复制:
      for (int n = 0; n < count % 4; n++)
      {
        *pd = *ps;
        pd++;
        ps++;
      }
    }
  }
  static void main(string[] args)
  {
    byte[] a = new byte[100];
    byte[] b = new byte[100];
    for (int i = 0; i < 100; ++i)
      a[i] = (byte)i;
    copy(a, 0, b, 0, 100);
    console.writeline("the first 10 elements are:");
    for (int i = 0; i < 10; ++i)
      console.write(b[i] + " ");
    console.writeline("\n");
  }
}

希望本文所述对大家的c#程序设计有所帮助。