我正在尝试调整供应商的 c# 示例代码以与 PCI-Express 设备连接。该代码基本上将一个大缓冲区分配为一个 int 数组,然后通过 fixed 关键字将其固定,然后将其交给硬件以填充数据。
这很好用,但最终失败了,因为 .Net 被限制在一个数组中约 20 亿个元素。我可以通过使用 Long 和 gcAllowVeryLargeObjects 关键字的数组将限制推到 16 GB,但最终我仍然遇到 .Net 限制。
在非托管代码中,我可以调用 VirtualAlloc 并直接请求 40 或 50GB,但是我不清楚这在 c# 中是否可行,而且我找不到任何好的示例代码。我意识到我可以用不同的语言来做这件事,但至少在 Windows 上我更熟悉.Net,除了程序的这个相对较小的部分之外,几乎没有特定于硬件的代码,所以我想尝试并坚持我所拥有的。