繁体   English   中英

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

[英]How do I mmap a _particular_ region in memory?

我有一个程序。 我希望它能够通过不同的运行来映射内存的特定区域。

  1. 我有程序的源代码。 C / C ++
  2. 我控制程序的编译方式。 海湾合作委员会
  3. 我控制程序的链接方式。 海湾合作委员会
  4. 我控制程序的运行方式(Linux)。

我只想拥有这个特定的内存区域,比如说我映射到特定文件的0xabcdabcd到0xdeadbeef。 反正有保证吗? (我必须以某种方式确保没有将其他内容加载到该特定区域中)。

编辑:

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

您需要做两件事:

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

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

将地址传递给addr map。 尝试在8KB的边界上获取它。 您可以尝试使用mlock()代替。

您无法确保没有其他东西占用该内存区域-先到先得。 但是,由于您需要内存的特定部分,所以我猜您有一个非常专业的环境,因此您只需要确保自己是第一名(使用开始脚本)即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM