c#中的VirtualAlloc分配大内存

use*_*479 2 c# memory virtualalloc

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

这很好用,但它最终失败了,因为.Net仅限于数组中大约20亿个元素.我可以通过使用Long和gcAllowVeryLargeObjects关键字数组将限制推高到16 GB,但最终我仍然遇到.Net限制.

在非托管代码中,我可以调用VirtualAlloc并直接请求40或50GB,但是如果在c#中这是可能的话我不清楚并且我无法找到任何好的示例代码.我意识到我可以用不同的语言来做这件事,但在Windows上至少我对.Net比较熟悉,除了这个程序的这个相对较小的部分外,很少有特定于硬件的代码所以我想要试着坚持我所拥有的.

jak*_*sch 5

你可以按下VirtualAlloc.签名是

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

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

或者,看看AllocHGlobal功能