树莓派3 Model B无法分配256TB虚拟内存的原因排查求助
树莓派3 Model B无法分配256TB虚拟内存的原因排查求助
各位大佬好!最近我出于学习目的,在研究Linux系统下的虚拟内存分配上限,遇到了一个困惑想请教大家:
- 在x86_64架构的机器上,我成功分配到了128TB的虚拟内存,和内核文档的说明完全一致;
- 但换到树莓派3 Model B(arm64架构)上时,我最多只能分配到170TB的虚拟内存,可内核文档里明明写着arm64的虚拟内存上限是256TB。
我实在搞不清楚是什么限制了我无法分配到满额的256TB,想问问各位有没有排查方向或者经验?
下面是我用来测试的代码(原代码未写完,我补了部分逻辑方便运行):
#define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> #include <sys/mman.h> int main() { char *chars; size_t nbytes = 0; // 原代码未初始化,这里补了初始值避免随机值干扰 while(chars != MAP_FAILED) { nbytes += 0x10000000000; // 每次尝试多分配1TB chars = mmap( NULL, nbytes, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0 ); if (chars != MAP_FAILED) { printf("成功分配 %zu TB 虚拟内存\n", nbytes / 0x10000000000); munmap(chars, nbytes); // 原代码此处未写完,补全释放逻辑 } else { printf("分配 %zu TB 虚拟内存失败\n", nbytes / 0x10000000000); break; } } return 0; }
有没有大佬能帮我分析下可能的原因?是树莓派的硬件限制、内核配置参数,还是我的测试代码存在问题?
备注:内容来源于stack exchange,提问作者azalio
相关产品推荐
相关产品推荐

