出于某种原因,我想用mmap
使用固定地址分配一 block 内存,即用MAP_FIXED
。所以我想使用一个不太可能被程序的任何其他部分(堆、堆栈等)使用的地址。任何适用于 64 位系统的地址范围?
最佳答案
Linux 将尝试在可执行文件中指定的地址加载 ELF 可执行文件,该地址可以是 64 位地址空间中的任何位置。但是,除非您为链接器提供特殊选项,否则它将构建在低地址加载的可执行文件(通常为 0x0000000000400000
),并合理密集地使用内存(只读和读写部分之间会有间隙) ),默认堆紧随其后。
Linux 通常使用 0x00007fff00000000
-0x00007ffffffffffff
范围内的地址用于堆栈,0x00007f0000000000
-0x00007fffffffffff
用于共享图书馆。它还为内核保留了 0x8000000000000000
-0xffffffffffffffff
。
这意味着 0x00007f0000000000
和堆末尾以上的所有内容都可能是空闲的,范围 0x0000800000000000
-0x7fffffffffffffff
。我说有可能,因为上面的分配都是默认值,如果您将内核或链接器配置为不同,这些分配是可以更改的。
关于c - mmap 一个不太可能被程序的任何其他部分使用的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17817799/