3

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

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

我只想拥有这个特定的内存区域,例如 0xabcdabcd 到 0xdeadbeef,我将其映射到特定文件。有没有办法保证这一点?(我必须以某种方式确保其他东西没有加载到这个特定区域)。

编辑:

如何确保没有其他任何东西占用内存中的这个特定区域?

4

3 回答 3

7

你需要做两件事:

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

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

于 2010-01-17T07:26:17.977 回答
1

传递要映射的地址addr。试着让它在 8KB 的边界上。不过你可以试试mlock()

于 2010-01-17T07:25:44.370 回答
0

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

于 2010-01-17T07:40:12.917 回答