gpt4 book ai didi

linux - 在 Linux 中分配特定地址

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:42:13 24 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

不是 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

关于linux - 在 Linux 中分配特定地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5571086/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com