我有一個程序。我希望它能夠通過不同的運行來映射特定區域的內存。如何在內存中映射_particular_區域?
- 我有程序的源代碼。 C/C++
- 我控制程序的編譯方式。 gcc
- 我控制程序如何鏈接。 gcc
- 我控制程序運行的方式(Linux)。
我只是想擁有這個特定的內存區域,說0xabcdabcd到0xdeadbeef,我mmap到一個特定的文件。無論如何要保證這一點? (我必須確保其他東西沒有加載到這個特定的區域)。
編輯:
如何使確保沒有其他需要該特定區域的內存?
我有一個程序。我希望它能夠通過不同的運行來映射特定區域的內存。如何在內存中映射_particular_區域?
我只是想擁有這個特定的內存區域,說0xabcdabcd到0xdeadbeef,我mmap到一個特定的文件。無論如何要保證這一點? (我必須確保其他東西沒有加載到這個特定的區域)。
編輯:
如何使確保沒有其他需要該特定區域的內存?
將地址傳遞給地圖addr
。嘗試在8KB的邊界上獲得它。不過你可以試試mlock()
。
你需要做兩件事情:
對於起始地址,您需要確保它是頁面大小的倍數。要獲得頁面大小,請使用調用sysconf(_SC_PAGESIZE)
(這是Linux上的適當調用,其他平臺可能會有所不同)。
總之,不要依賴於MAP_FIXED的工作。它可以(並因此會)失敗。 – 2010-01-17 07:33:16
@theatrus - 你指的是哪個平臺。在Linux上,如果未指定MAP_FIXED,addr只會被解釋爲提示(http://www.kernel.org/doc/man-pages/online/pages/man2/mmap.2.html)。 – 2010-01-17 07:56:33
MAP_FIXED不能保證成功 - 當然它會告訴你無法映射,但如果你的程序取決於這種行爲,那麼將有問題:) – 2010-01-17 07:58:05
爲什麼*特殊*區域記憶?這是什麼原因? – shylent 2010-01-17 07:24:59
另請參閱:http://stackoverflow.com/questions/2084098/two-c-apps-sharing-a-read-only-region-of-memory-on-lnux。絕不是重複的,但密切相關。 – 2010-01-18 06:33:01