首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中创建内存对齐阵列

在C#中创建内存对齐阵列
EN

Stack Overflow用户
提问于 2022-08-07 17:31:16
回答 2查看 93关注 0票数 1

我需要创建一个与64字节边界对齐的数组。我需要这样做,因为我正在调用一个使用AVX的DLL,它需要待对齐的数据。本质上,我需要在C#中这样做:

代码语言:javascript
复制
void* ptr = _aligned_malloc(64 * 1024, 64);
int8_t* memory_ptr = (int8_t*)ptr;

我很确定我不能在C#中自然地为这样的边界创建一个数组。因此,一个选项是创建一个字节数组,这个数组是x+64 long,然后“创建”一个覆盖它的数组,但是在所需的边界上有一个偏移量。

问题是我如何做到这一点,而不存在内存泄漏?(内存泄漏是我不愿使用DLL来创建对数组的引用并将其传递给C#的原因。除非有好办法这样做?)

使用以下有用的答案,这就是我所拥有的,希望它能帮助到其他人:

代码语言:javascript
复制
public class Example : IDisposable
{
    private ulong memory_ptr;

    public unsafe Example() 
    {
        memory_ptr = (ulong)NativeMemory.AlignedAlloc(0x10000, 64);
    }

    public unsafe Span<byte> Memory => new Span<byte>((void*)memory_ptr, 0x10000);

    public unsafe void Dispose()
    {
        NativeMemory.Free((void*)memory_ptr);
    }
}
EN

Stack Overflow用户

发布于 2022-08-07 18:34:10

为了避免内存泄漏,首先需要固定阵列。钉扎防止指向的对象在垃圾收集堆上移动。

有一个类似于您正在做的这里的例子。

但是,这个例子还不够深入,因为它只是引脚而不控制初始内存分配。若要防止内存泄漏,请使用GCHandle.Alloc与GCHandleType.Pinned。就像

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73269625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档