app*_*app 3 linux malloc virtual-memory
我想在Linux进程中的特定地址分配一块内存。实际上我想做一些类似的事情:我将有多个进程。每个进程都会调用库(由我编写)中的初始化函数,该函数将在进程的地址空间中分配一些内存(它将存储进程相关信息)。这将由每个进程完成
一旦分配了该内存,程序就会调用库中的其他函数。现在这些函数想要访问第一个函数分配的内存(包含进程相关信息)。
问题是我无法存储库中进程地址空间中分配的内存的地址(甚至不能存储在静态指针中,因为有多个进程),而且我什至不希望用户程序存储该地址。我只是不想让用户程序知道库在其地址空间中分配了内存。库函数对他们来说是抽象的,他们只能使用它们。
有没有可能克服这个问题。我在想,每当任何进程调用分配内存的库的初始化函数时,内存总是在所有进程中分配在相同的地址(比如 10000),而不管其他所有事情。
因此任何想要访问该内存的库函数都可以轻松地通过以下方式完成:
char *p=10000;
然后访问,访问的是调用库函数的进程的地址空间。
不是 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