2015-01-08 56 views
0

我正在尋找一種C#中的內存分配方法,它提供了一個連續的內存塊(> 4 GiB)。這種方法應該適用於Mono以及Microsoft .NET。如果這個內存不受管理,這沒有問題。如何在C#中分配一個大的連續內存塊(win + linux)

的Linux:
我認爲的DllImport調用MMAP是單一個不錯的選擇。

的Windows:
我發現了幾個方法的諸如HeapAlloc,AllocHGlobal,......,但他們都不似乎提供了一個64位的尺寸參數。

還有一種爲GC啓用大對象的方法。這些物體是連續的嗎?

+3

你能告訴我們一些關於爲什麼你需要4 GB的連續內存嗎?肯定會有更好的辦法。 – Haney

+0

內存映射文件API無處不在使用Int64。不知道它是否滿足您的需求。 –

+0

此代碼是硬件仿真器的一部分。我們已經有了一個Java實現。我們現在正在評估將代碼移植到Mone/.NET – Paebbels

回答

1

Marshal.AllocHGlobal()有一個IntPtr版本,它可以支持64位值。

是什麼讓你說它沒有。

+0

此[手冊頁](http://msdn.microsoft.com/de-de/library/5cyb68cy(v = vs.110).aspx)具有矛盾的參數說明:摘要:'...通過使用指針指定的字節數.'參數說明:'cb - 內存中所需的字節數。「我在哪裏可以找到可用於參數的類型和值範圍? AllocHGlobal調用也是[不建議](http://msdn.microsoft.com/de-de/library/aa366723.aspx)的LocalAlloc。 AllocHGlobal有2個重載,其中一個僅支持Int32。所以我找不到IntPtr允許指向Int64的任何擔保。 – Paebbels

+0

@Paebbels:我只是對此進行了一些探索,發現很難找到信息。但是,我可以看到'Marshal.AllocHGlobal()'被重載,一個版本接受一個'IntPtr',它能夠保存64位值(正如我在我的答案中所指出的那樣)。你嘗試過使用'IntPtr'嗎?你有沒有嘗試一個更大的價值? –

相關問題