2013-05-27 60 views
0

的特定區域有什麼事情:如何限制的malloc的內存

  • 分配/解除分配/重新分配許多可變大小的對象,而不碎裂(基本上是malloc那樣),
  • 跟蹤所有內存在使用這些分配的網頁,這樣我可以
  • mprotect所有這些網頁,使他們只讀
  • 最好沒有任何鎖定 - 所有的訪問將是單線程
  • 適用於Linux和OS X,最好與Windows上的某些功能相同?

我想不出用標準內存分配函數做這件事的方法。想到的唯一策略是使用自定義內存池而不是malloc。所以我的問題是:有沒有辦法做到這一點,沒有自定義malloc或(如果沒有)關於使用什麼的建議?

我可以換malloc,並保持它很容易我怎麼保證,一旦我在這些網頁上稱爲mprotectmalloc不會嘗試開始或之前使用的內存被「捕獲」使用的所有頁面的軌道在一個受影響的頁面內分配的塊結束之後?

+0

你是什麼意思「以後」?該過程終止後?你真的是指「頁面」(虛擬內存)還是「幀」(物理內存)? – Elazar

+0

你只需要分配內存?還是要釋放它?你的用例是什麼? – thejh

+0

正常的malloc不會工作,例如因爲對於小分配,頁面在使用malloc分配的多個事物之間共享 – thejh

回答

1

開放源碼Memory Pool System將在MPS本身不會觸及的操作系統頁面大小的塊中分配內存。如果你願意的話,你可以這些頁面mprotect,並確保它們不會被分配器本身(它將其所有數據結構保存在其他地方)或任何其他內存池所觸及。如果您使用MVT游泳池類,您也可以利用inline lockless allocationLinux, Mac OS X, and Windows are supported

聲明:我是MPS的架構師。

+1

感謝您的建議,但由於許可限制,我無法使用此功能。最後,我決定使用一個免費的malloc實現(dlmalloc)。 – Ramon

+0

祝你好運,但你注意到「如果許可條款不適合你(例如,你正在開發一個封閉源代碼商業產品或編譯器運行時間爲 系統),你可以很容易地獲得MPS許可來自 Ravenbrook的不同條款。「 – rptb1