如何在内存中映射_particular_区域?

ano*_*non 3 c c++ mmap

我有一个程序.我希望它能够在不同的运行中映射特定的内存区域.

  1. 我有程序的源代码.C/C++
  2. 我控制程序的编译方式.GCC
  3. 我控制程序的链接方式.GCC
  4. 我控制程序的运行方式(Linux).

我只想拥有这个特定的内存区域,比如说我将mmap映射到特定文件的0xabcdabcd到0xdeadbeef.无论如何要保证这个吗?(我必须以某种方式确保其他东西没有加载到这个特定的区域).

编辑:

如何使确保没有其他需要该特定区域的内存?

R S*_*hko 7

你需要做两件事:

  1. 将起始地址指定为mmap的第一个参数.
  2. 包括MAP_FIXED标志.

对于起始地址,您需要确保它是pagesize的倍数.要获取页面大小,请使用调用sysconf(_SC_PAGESIZE)(这是在Linux上的适当调用,其他平台可能不同).

  • 简而言之,不要依赖于MAP_FIXED工作.它可以(因此会)失败. (2认同)
  • MAP_FIXED不能保证成功 - 当然它会告诉你无法映射,但是如果你的程序依赖于这种行为那么就会出现问题:) (2认同)