c - linux上PPC64下一个进程可以有多少内存

标签 c linux memory linux-kernel powerpc

我看了一个 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/

相关文章:

java - 从java确定linux版本

Linux socket使用多线程发送

.net - 测量 .Net 中的内存使用情况

c++ - 大数据集的 dijkstra 计算期间的 std::bad_alloc

c - 为什么使用 `%3.3f` 打印值为 2.5367 的 float 会输出 2.537 而不是 2.536?

c - 下一个回文码

c - 当我在 C 中运行 for 循环时,程序停止响应

php - 无法在kali linux上配置LAMP

postgresql - Apache solr 5.3.1 内存不足

C 计算文件中数字和字母的数量