You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中创建64字节边界对齐的数组?

在C#中创建64字节边界对齐的内存块(适配AVX指令要求)

我需要创建一个按64字节边界对齐的数组,因为要调用使用AVX的DLL,而AVX要求数据必须对齐。我需要在C#中实现类似以下C语言的功能:

void* ptr = _aligned_malloc(64 * 1024, 64);
int8_t* memory_ptr = (int8_t*)ptr;

我认为C#无法直接创建此类对齐边界的数组,考虑过创建长度为x+64的byte数组,再通过偏移生成一个对齐的覆盖数组,但不知如何实现且避免内存泄漏。(内存泄漏问题导致我不愿通过DLL创建数组再传给C#,除非有合适的方法)

解决方案代码

借助可行方法,我实现了如下代码,可帮助有相同需求的开发者:

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);
    }
}

代码说明

  • 使用NativeMemory.AlignedAlloc直接分配满足64字节对齐要求的内存块,示例中分配大小为64KB(0x10000)
  • 通过Span<byte>封装内存地址,便于在C#中进行便捷的读写操作
  • 实现IDisposable接口,在对象生命周期结束时调用NativeMemory.Free释放内存,彻底避免内存泄漏问题

内容的提问来源于stack exchange,提问作者BJury

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:27:09