【发布时间】:2018-08-20 12:43:20
【问题描述】:
指定当使用mmap 和NULL addr 时,内核选择创建映射的(页面对齐的)地址:
mmap() 在虚拟地址空间中创建一个新的映射 调用过程。新映射的起始地址是 在地址中指定。长度参数指定的长度 映射(必须大于 0)。 如果 addr 为 NULL,则内核选择(页面对齐的)地址 创建映射的位置;这是最便携的方法 创建一个新的映射。
假设我有以下代码:
void (*x)(void);
void (*y)(void);
x=mmap(NULL, 0x500, PROT..., FLAGS..., FD..., 0);
y=mmap(NULL, 0x500, PROT..., FLAGS..., FD..., 0);
这是否意味着y 将紧跟在x 之后?
谢谢。
【问题讨论】:
-
你引用的文字中哪里提到了这种保证?
-
它表示内核可以进行选择。这应该清楚地表明您不应该对其选择做出任何假设。
-
为什么要将返回的内存分配给函数指针?你打算用它做什么?
-
man mmap 说
If addr is not NULL, then the kernel takes it as a hint about where to place the mapping; on Linux, the mapping will be created at a nearby page boundary. The address of the new mapping is returned as the result of the call.哪个部分不清楚? -
实际的问题是:你为什么要关心?这显然是一个 XY 问题。