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

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

这种方法效果很好,但最终失败了,因为.Net数组中的元素限制为20亿个左右。我可以使用Long和gcAllowVeryLargeObjects关键字数组将限制扩展到16 GB,但是最终我仍然遇到.Net限制。

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

参考方案

您可以选择VirtualAlloc。签名是

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

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

或者,看看AllocHGlobal函数

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

每个文件合并后添加换行 - python

我有很多类似以下内容的JSON文件:例如。1.json{"name": "one", "description": "testDescription...", "comment": ""} test.json{"name"…

您如何在列表内部调用一个字符串位置? - python

我一直在做迷宫游戏。我首先决定制作一个迷你教程。游戏开发才刚刚开始,现在我正在尝试使其向上发展。我正在尝试更改PlayerAre变量,但是它不起作用。我试过放在列表内和列表外。maze = ["o","*","*","*","*","*",…

Mongo汇总 - javascript

我的收藏中有以下文件{ "_id": ObjectId("54490b8104f7142f22ecc97f"), "title": "Sample1", "slug": "samplenews", "cat": …