首页 > 编程语言 >C# unsafe 快速复制数组

C# unsafe 快速复制数组

时间:2024-10-11 23:43:24浏览次数:7  
标签:IntPtr oriInts C# unsafe int result 数组 new

     /// <summary>
     /// 复制内存
     /// </summary>
     /// <param name="dest">目标指针位置</param>
     /// <param name="src">源指针位置</param>
     /// <param name="count">字节长度</param>
     /// <returns></returns>
     [DllImport("msvcrt.dll")]
     public static extern IntPtr memcpy(IntPtr dest, IntPtr src, int count);
     unsafe static int[] MyCopy(int[] oriInts)
     {
         int[] result = new int[oriInts.Length];
         int lenth= oriInts.Length;
         fixed (int* pOri= oriInts) //fixed语句获取指向任意值类型、任意值类型数组或字符串的指针
         {
             fixed (int* pResult = result)
             {
                 memcpy(new IntPtr(pResult), new IntPtr(pOri), sizeof(int) * lenth);//注意,第一个参数和第二个参数的顺序
             }
         }
         return result;
     }
     static int[] MyCopyB(int[] oriInts)
     {
         int[] result = new int[oriInts.Length];
         for(int i=0;i<oriInts.Length;i++)
         {
             result[i]= oriInts[i];
         }
         return result;
     }

 static void Main(string[] args)
 {
     var a = sizeof(int);
     int[] ori = new int[100000000];
     for(int i = 0; i < ori.Length; i++)
     {
         ori[i] = i;
     }
     Stopwatch sw = new Stopwatch();
     sw.Start();
     int[] copyA= MyCopy(ori);
     sw.Stop();
     Console.WriteLine(sw.ElapsedMilliseconds);
     sw.Restart();
     int[] copyB = MyCopyB(ori);
     sw.Stop();
     Console.WriteLine(sw.ElapsedMilliseconds);
}

标签:IntPtr,oriInts,C#,unsafe,int,result,数组,new
From: https://www.cnblogs.com/johnyang/p/18459575

相关文章

  • 【02】手把手教你0基础部署SpringCloud微服务商城教学-Mybatis篇(下)
    上期回顾:【01】手把手教你0基础部署SpringCloud微服务商城教学-Mybatis篇(上)Part1.续接上文Mybatis-plus的批处理功能接下来我们学习一下IService的批量查询,我们用以往的for循环做一个对比这是for循环部分的代码privateUserbuilderUser(inti){Useruser=new......
  • 【进阶版】如何实现一个基于 HTML+CSS+JS 的任务进度条
    创建一个动态任务进度条:进阶版实现在现代网页开发中,任务进度条是用户交互中非常重要的组件,它能够直观地展示任务的进展情况。本文将向你展示如何使用HTML、CSS和JavaScript创建一个动态的任务进度条。在这个进阶版本中,用户不仅可以通过点击进度条来更新进度,还可以手动......
  • 蓝桥杯真题 穿越时空之门(第十五届蓝桥杯省赛PythonB组A题) c++题解
    问题如下(附链接):穿越时空之门题解代码如下:#include<iostream>usingnamespacestd;intx1(inti){inta=0;while(i){a+=i%2;i/=2;}returna;}intx2(inti){intb=0;while(i){b+=i%4;i/=4;}returnb;}intmain()......
  • 【异常错误】RuntimeError: CUDA error: device-side assert triggered 遇到这种错误
    遇到的错误:运行的时候突然就这样了 /pytorch/aten/src/ATen/native/cuda/Indexing.cu:699:indexSelectLargeIndex:block:[283,0,0],thread:[56,0,0]Assertion`srcIndex<srcSelectDimSize`failed./pytorch/aten/src/ATen/native/cuda/Indexing.cu:699:indexSele......
  • layui用iframe更新表单怎么回显select下拉框中的数据
     如图所示的三个步骤,获取contentWindow,在iframe中的select的id为categoryId中赋值,最后还要重新渲染,就能在iframe中回显得到selected的选项了,效果如下图所示。  另外,我尝试过在iframe的html中添加inputtype="hidden"id="categoryHid"的元素来存放categoryId的值,并在主页......
  • Linux中ctrl+z 、ctrl+c、 ctrl+d区别
    ctrl+c和ctrl+z都是中断命令,但是他......
  • oracle 19c dgbroker 报错ORA-16664 with ORA-12514如何解决
    alert中一堆这个保存一新***********************************************************************FatalNIconnecterror12504,connectingto:(DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=)(INSTANCE_NAME=hrz)(CID=(PROGRAM=oracle)(HOST=sd4)(USER=oracle)))(ADDRESS......
  • 使用PyTorch搭建Transformer神经网络:入门篇
    目录简介环境设置PyTorch基础Transformer架构概述实现Transformer的关键组件5.1多头注意力机制5.2前馈神经网络5.3位置编码构建完整的Transformer模型训练模型总结与进阶建议简介Transformer是一种强大的神经网络架构,在自然语言处理等多个领域取得了巨大......
  • docker 安装与使用
    0docker出现的原因软件在开发机器上可以跑,但是在其他机器上,无法跑,或者其他机器需要繁琐的环境配置。在另外的机器上能跑,必须保证:操作系统的设置各种库和组件的安装从根本上解决问题,软件带环境安装,安装的时候,把原始环境一模一样地复制过来。虚拟机是带环境安装的一......
  • C++ 类(1)
    1.什么是类在C语言中,我们学过结构体,我们可以在结构体里面定义变量在C++中,我们还可以在结构体里面定义函数structAdd{inta;charb;doublec;int&cal(inta,intb){a=a+b;returna;}};intmain(void)......