Linux中分配特定地址

app*_*app 3 linux malloc virtual-memory

我想在Linux进程中的特定地址分配一块内存。实际上我想做一些类似的事情:我将有多个进程。每个进程都会调用库(由我编写)中的初始化函数,该函数将在进程的地址空间中分配一些内存(它将存储进程相关信息)。这将由每个进程完成

一旦分配了该内存,程序就会调用库中的其他函数。现在这些函数想要访问第一个函数分配的内存(包含进程相关信息)。

问题是我无法存储库中进程地址空间中分配的内存的地址(甚至不能存储在静态指针中,因为有多个进程),而且我什至不希望用户程序存储该地址。我只是不想让用户程序知道库在其地址空间中分配了内存。库函数对他们来说是抽象的,他们只能使用它们。

有没有可能克服这个问题。我在想,每当任何进程调用分配内存的库的初始化函数时,内存总是在所有进程中分配在相同的地址(比如 10000),而不管其他所有事情。

因此任何想要访问该内存的库函数都可以轻松地通过以下方式完成: char *p=10000;

然后访问,访问的是调用库函数的进程的地址空间。

gby*_*gby 5

不是 100% 我得到了你的目标,但如果你想将内存映射到特定的设置地址,你可以使用 MAP_FIXED 标志到 mmap():

“当在 flags 参数中设置 MAP_FIXED 时,会通知实现 pa 的值应准确地为 addr。如果设置了 MAP_FIXED,则 mmap() 可能会返回 MAP_FAILED 并将 errno 设置为 [EINVAL]。如果 MAP_FIXED 请求成功,由 mmap() 建立的映射将替换 [pa,pa+len) 范围内进程页面的任何先前映射。”

请参阅 mmap 手册页:http://linux.die.net/man/3/mmap

  • 请小心,因为 MMAP_FIXED 将接管该地址中已存在的任何内容。从库中很难知道该进程是否已经映射了某些内容。 (4认同)