相关疑难解决方法(0)

是否有一种可移植的方式来复制C#中的内存块?

如果你想在两个数组之间进行内存复制,那么Array.Copy在.NET中有一个函数:

char[] GetCopy(char[] buf)
{
    char[] result = new char[buf.Length];
    Array.Copy(buf, result);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

这通常是比手动换循环的所有字符复制更快bufresult,因为它是一个块拷贝操作,仅仅需要一块内存,并将其写入到目标.

同样,如果我给了a char*int指定了它的大小,我的选择是什么?这是我考虑过的:

  • Buffer.BlockCopy:需要srcdst成为数组
  • Buffer.MemoryCopy:正是我正在寻找的,但仅在.NET桌面上可用
  • Marshal.Copy:在.NET 2.0中停止受支持

或者,如果没有其他选择,是否有某种方法从指针char*和长度构造数组int?如果我能做到这一点,我可以将指针转换为数组并将它们传递给Array.Copy.

我不是在寻找for循环,因为正如我所说的那样,与块副本相比它们效率不高,但如果这是我认为必须做的唯一方法.

TL; DR:我基本上都在寻找memcpy(),但在C#中可以用于PCL.

c# arrays pointers copy memcpy

6
推荐指数
1
解决办法
1011
查看次数

如何将非托管内存数组复制到同一个非托管内存中

我保留了10个128字节的内存

IntPtr dst = Marshal.AllocHGlobal (10 * 128);

IntPtr src1 = Marshal.AllocHGlobal (128);
// .... init scr1 from DLL
IntPtr src2 = Marshal.AllocHGlobal (128);
// .... init scr2 from DLL
Run Code Online (Sandbox Code Playgroud)

我需要的128个字节元素复制src1src2dst指定的偏移量.

Marshal.Copy不适合此类用途.自从srcdst非托管内存区域.

c# memory unmanaged copy

4
推荐指数
1
解决办法
1811
查看次数

标签 统计

c# ×2

copy ×2

arrays ×1

memcpy ×1

memory ×1

pointers ×1

unmanaged ×1