gpt4 book ai didi

c# - C#中的VirtualAlloc分配大内存

转载 作者:行者123 更新时间:2023-12-03 04:16:40 29 4
gpt4 key购买 nike

我正在尝试改编供应商的 C# 示例代码以与 PCI-Express 设备连接。该代码基本上将一个大缓冲区分配为 int 数组,然后通过固定关键字固定它,然后将其交给硬件以填充数据。

这很有效,但最终会失败,因为 .Net 数组中的元素仅限于约 20 亿个元素。我可以通过使用 Long 和 gcAllowVeryLargeObjects 关键字数组将限制扩展到 16 GB,但最终我仍然遇到 .Net 限制。

在非托管代码中,我可以调用 VirtualAlloc 并直接请求 40 或 50GB,但是我不清楚这在 C# 中是否可行,而且我还没有找到任何好的示例代码。我意识到我可以用不同的语言来完成此操作,但在 Windows 上至少我更熟悉 .Net,除了程序的相对较小部分之外,几乎没有特定于硬件的代码,所以我想尝试并坚持我所拥有的。

最佳答案

您可以pinvoke VirtualAlloc。签名是

[DllImport("kernel32.dll", SetLastError=true)]
static extern IntPtr VirtualAlloc(IntPtr lpAddress, UIntPtr dwSize, AllocationType lAllocationType, MemoryProtection flProtect);

您可以在 pinvoke.net 上找到大多数 pinvoke 结构和签名:VirtualAlloc

或者,查看 AllocHGlobal函数

关于c# - C#中的VirtualAlloc分配大内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22955531/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com