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#程序设计有所帮助。
上一篇: 详解html5页面 rem 布局适配方法
下一篇: 白开水加盐对女生的好处和坏处有什么