gpt4 book ai didi

c - 为什么 mmap 不能分配内存?

转载 作者:太空狗 更新时间:2023-10-29 16:58:01 28 4
gpt4 key购买 nike

我以 root 权限运行程序,但它一直提示 mmap 无法分配内存。代码片段如下:

#define PROTECTION (PROT_READ | PROT_WRITE)
#define LENGTH (4*1024)

#ifndef MAP_HUGETLB
#define MAP_HUGETLB 0x40000
#endif

#define ADDR (void *) (0x0UL)
#define FLAGS (MAP_PRIVATE | MAP_ANONYMOUS | MAP_HUGETLB)

int main (int argc, char *argv[]){
...
// allocate a buffer with the same size as the LLC using huge pages
buf = mmap(ADDR, LENGTH, PROTECTION, FLAGS, 0, 0);
if (buf == MAP_FAILED) {
perror("mmap");
exit(1);
}
...}

硬件:我有 8G 内存。处理器是ivybridge

Uname 输出:

Linux mymachine 3.13.0-43-generic #72-Ubuntu SMP Mon Dec 8 19:35:06 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

编辑 1:错误的输出

mmap: Cannot allocate memory

还加了一行打印errno

printf("something is wrong: %d\n", errno);

但是输出是:

something is wrong: 12

编辑 2:来自/proc/meminfo 的大量 tlb 相关信息

HugePages_Total:       0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB

最佳答案

嗯,作为Documentation/vm/hugetlspage.txt建议,做

echo 20 > /proc/sys/vm/nr_hugepages

解决了这个问题。在 ubuntu 14.04 上测试。检查Why I can't map memory with mmap还有。

关于c - 为什么 mmap 不能分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27634109/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com