2011-03-23 51 views
1

我見過很多有關malloc內存消耗的問題,但沒有一個關於我正在處理的內容。需要內存佔用非頁面內存的幫助

我工作在高內存消耗過程,也需要良好的性能。 代碼在C. 我的目的是讓這個進程使用多達70%的機器內存作爲非可分頁內存(用於性能),以及任何高於可分頁內存的內容,所以OS仍然會有一些記憶與「玩」。

因爲我在運行時需要它,任何性能分析程序(valgrind或類似的)都是不相關的。

問題是我只能跟蹤我請求的內存量,而不是malloc正在使用的實際大小。所以當我想我沒有超過700Mb的分配時,malloc持有〜1Gb的內存,並且由於我要求不可分頁的所有內存都是不可分頁的,並且進程已經開始死亡。

如果有一種方法可以知道有多少不可分頁的內存malloc支持我的進程,那將非常棒。但在這裏閱讀帖子,我猜它仍然不被支持。

我願意接受任何人可以給我的想法或建議。

謝謝。

+0

哪個平臺?您需要特定於平臺的API來檢查流程的內存使用情況。 – Erik 2011-03-23 09:55:33

+0

你是對的,抱歉缺少在帖子上添加此信息。 我正在開發Linux50操作系統,安全平臺。 – 2011-03-23 09:57:28

+0

看看/ proc/self/status和/ proc/self/statm – Erik 2011-03-23 10:00:06

回答

1

一般來說,如果您需要對內存分配進行精細控制,您應該明確地使用mmap()進行分配,然後提供您自己的malloc()替換項,以便將您的區域包含在內。這也可以幫助你避免這樣的問題:如果你試圖在普通的malloc()池中嘗試使用mlock,你將最終鎖定的比你想要的要多,因爲鎖定的粒度是一個4KB的頁面,你鎖定的分配將會穿插一般的libc分配。

+0

謝謝,這可能是我們要使用的方法。 – 2011-03-23 12:07:59