我看了一个 linux 的测试用例。它测试 mmap
如下:
#define HIGH_ADDR (void *)(0x1000000000000)
addr = mmap(HIGH_ADDR, map_sz, PROT_READ,
MAP_SHARED | MAP_FIXED, fildes, 0);
在那种情况下,在 PPC64 下,预期结果 会得到一个错误号 ENOMEM
。
但是 PPC64 下的实际结果 得到一个错误号 Invalid argument
。
无论如何,它在 X86_64 arch 上运行良好。
我想也许 PPC64 没有分配足够的内存。因此,我尝试将 HIGH_ADDR
的定义修改为:
#define HIGH_ADDR (void *)(0x7FFFFFFFFFF)
但它仍然得到 Invalid argument
。
我只想知道,PPC64 的 linux 如何管理他的内存。我的意思是,我想知道用户空间程序的内存地理。或者我应该使用什么最大地址。
最佳答案
来自 man 2 mmap
:
EINVAL We don't like addr, length, or offset (e.g., they are too large, or not aligned on a page boundary). EINVAL (since Linux 2.6.12) length was 0. EINVAL flags contained neither MAP_PRIVATE or MAP_SHARED, or contained both of these values.
因此,如果 addr
太大,mmap
将用 EINVAL
发出错误信号。因此,这是预期的行为。
建议不要使用MAP_FIXED
,除非你有充分的理由。
脚注:并非所有 64 位架构都支持 64 位地址。
关于c - linux上PPC64下一个进程可以有多少内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12153345/