【问题标题】:How to copy stackalloc memory to/from array?如何将stackalloc内存复制到数组中?
【发布时间】:2018-10-10 06:38:07
【问题描述】:

使用stackalloc 内存时,我想将其内容复制到数组中/从数组中复制。我正在寻找类似于Buffer.BlockCopy 的东西,它可以让我传递源数据中的偏移量和目标数据中的偏移量。

stackalloc内存有这样的方法吗?或者一般来说——如何在不逐个元素迭代的情况下一次性复制内存?

int i = 0;
double* window = stackalloc double[max_window_size];
for (int x = 0; x < width; ++x)
{
    window[i] = array[x, y];
    ++i;
}

重要提示:我询问的数组已经存在。所以我不能从stackalloc 内存创建一个数组,然后将该数组复制到现有数组,因为它首先会使使用stackalloc 的整个点无效。

【问题讨论】:

  • 您可能想研究一下使用 Span blogs.msdn.microsoft.com/mazhou/2018/03/25/…
  • 请向我们展示一个 stackalloc minimal reproducible example,它通过一次迭代一个副本来进行复制,我们将向您展示如何做得更好。
  • @Enigmativity,在这里我从二维数组复制一行到堆栈上分配的“窗口”。我想一次性将内容复制到stackalloc 内存。
  • @astrowalker 它仍然不是一个完整的例子......你还没有定义数组或 y
  • @astrowalker 我创建了一个新问题来讨论使用 Span 进行切片而不复制内存 stackoverflow.com/questions/52750582/…

标签: c# arrays stackalloc


【解决方案1】:

我在Copy data from from IntPtr to IntPtr找到了答案

所以要回答我自己的问题,必须先固定数组(使用fixed 关键字),这样一来手头就有两个指针。 Buffer.MemoryCopy 没有偏移量的重载,但是很少的指针运算会得到你想要的效果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2021-06-29
    • 1970-01-01
    相关资源
    最近更新 更多