C#调用C++ memcpy实现各种参数类型的内存拷贝 VS marshal.copy的实现 效率对比

C#调用C++ memcpy实现各种参数类型的内存拷贝 VS marshal.copy的实现 效率对比

using System;
using System.Runtime.InteropServices;
using System.IO;
namespace tx
{
    struct ST
    {
       public char c1;
       public int x;
       public int y;
    }
    class Ct
    {
        [DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
        public static extern void MemCopy(byte[] dest, byte[] src, int count);//字节数组到字节数组的拷贝

        [DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
        public static extern void MemCopy(int[] dest, byte[] src, int count);//字节数组到整形数组的拷贝

        [DllImport("msvcrt.dll", EntryPoint = "memcpy", CallingConvention = CallingConvention.Cdecl, SetLastError = false)]
        public unsafe static extern void MemCopy(ref ST dest, byte[] src, int count);//注意只有结构体能这么做,class不可以

        static void Main(string[] args)
        {
            //测试----------------------------------------------
            var ms = new MemoryStream();
            BinaryWriter writer = new BinaryWriter(ms);
            writer.Write((byte)'a');
            writer.Write((byte)'b');
            writer.Write((byte)'c');
            writer.Write((byte)'d');
            writer.Write((Int32)10);
            writer.Write((Int32)30);
            var len = ms.Length;
            int[] bs = new int[len/4];
            byte[] bss = new byte[len];

            byte[] buf = ms.GetBuffer();
            var ot = new ST();
            Mem
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值