How do I mmap a _particular_ region in memory?

故事扮演 提交于 2020-01-13 18:54:47

问题


I have a program. I want it to be able to mmap a particular region of memory over different runs.

  1. I have the source code of the program. C/C++
  2. I control how the program is compiled. gcc
  3. I control how the program is linked. gcc
  4. I control how the program is run (Linux).

I just want to have this particular region of memory, say 0xabcdabcd to 0xdeadbeef that I mmap to a particular file. Is there anyway to guarantee this? (I have to somehow make sure that other things aren't loaded into this particular region).

EDIT:

How do I make sure that nothing else takes this particular region in memory?


回答1:


You cannot make sure that nothing else takes that area of memory - first come, first served. However, as you need a particular part of the memory, I'm guessing that you have a pretty specialized environment, so you simply need to make sure that you are first (using start scripts)




回答2:


You need to do two things:

  1. Specify the starting address as the first argument to mmap.
  2. Include the MAP_FIXED flag.

For the starting address, you need to make sure it's a multiple of the pagesize. To get the pagesize, use the call sysconf(_SC_PAGESIZE) (that's the appropriate call on Linux, other platforms may be different).




回答3:


Pass the address to map in addr. Try to get it on a 8KB boundary. You could try mlock() instead though.



来源:https://stackoverflow.com/questions/2080281/how-do-i-mmap-a-particular-region-in-memory

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!