2016-05-29 158 views
0

我正在創建一個CMA(連續內存分配器)用戶端驅動程序,並且我已經對一些空間區域進行了縮小處理。如果我創建了第二個對象,它想要映射相同的內存區域,是否可以搜索它已經被mmaped並傳回該地址?目前,每個對象都將製作自己的mmap,它的工作原理但在性能方面是一個好主意?MMAP共享多個對象

該類用於映射內存的不同區域,具體取決於構造函數中傳遞的內容,所以static不起作用。

+0

」在性能方面是一個好主意嗎?「爲什麼不測量它? –

+0

措施是什麼?我沒有替代方法了:) – user1876942

+0

將它映射兩次,然後映射一次並重新使用該映射。 –

回答

0

我不是100%確定你想達到什麼,但我猜你想優化分配,這樣如果同一個區域在同一個應用程序中多次使用,你的開銷就會減少。

內核需要跟蹤每個引用到一個物理內存頁面,因此如果您在代碼中「跟蹤分配並返回相同的指針」,您將需要引用自己計算分配,並且只執行分配/當需要時免費。我會在用戶模式級別執行該操作,基本上保持鍵入底層內存和大小的std::map(或類似),然後引用對該分配進行計數,並且當引用計數達到零時僅調用munmap(當該地區無法找到時,當然只能撥打mmap)。如果你有多個不同大小的分配到同一個區域,它會變得更加「有趣」,但是我認爲沒有一種方法可以實現這一點 - 至少在第二次調用請求更大的分配。

在用戶模式下這樣做的好處很明顯:如果您在會計中犯了錯誤,內核仍會在應用程序停止時釋放內存。內核模式下的內存分配std::map [或者相當於]也將更難處理。 「

+0

這是我的想法。我將把它留給我的驅動程序的用戶來維護已映射的地址和計數。 – user1876942