c - mmap 一个不太可能被程序的任何其他部分使用的地址

标签 c linux gcc x86-64

出于某种原因,我想用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/

相关文章:

c - 如何编译GCC交叉编译器?

c - 如何检查后台运算符(operator) '&' 的命令?

linux - mv 'x' 和 'y' 是同一个文件

使用 openmp 进行 AES 加密的电路级并行仿真

c - 在 Linux 中重新传播捕获的信号

linux - Ubuntu Linux - 插入 USB 设备时生成应用程序

Objective-C 语法检查器

C++ 常量问题

c - 如何在 C 代码中调用用 ARM 汇编语言编写的函数?

c - 我如何在 Linux 上获取 cpuid()?