C++ mmap如何分配超过20Gb的容量?
我尝试使用mmap函数在虚拟空间中分配大量内存。我需要30Gb左右,但不行。我尝试使用20Gb,结果相同。我在带有60Gb RAM的OVH 64位机器服务器上执行了测试 我的测试代码:C++ mmap如何分配超过20Gb的容量?,c++,c,memory-management,mmap,virtual-memory,C++,C,Memory Management,Mmap,Virtual Memory,我尝试使用mmap函数在虚拟空间中分配大量内存。我需要30Gb左右,但不行。我尝试使用20Gb,结果相同。我在带有60Gb RAM的OVH 64位机器服务器上执行了测试 我的测试代码: #include <stdio.h> #include <string.h> #include <sys/mman.h> #include <errno.h> int main() { void *r = NULL; printf("%lu\n",
#include <stdio.h>
#include <string.h>
#include <sys/mman.h>
#include <errno.h>
int main()
{
void *r = NULL;
printf("%lu\n", sizeof(size_t));
r = mmap(NULL, ((size_t)20)*1024*1024*1024, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
printf("%d %s\n", r == MAP_FAILED, strerror(errno));
return 0;
}
有人可以告诉我是否可以用mmap分配30Gb的虚拟内存,为什么?还有,如何以其他方式分配30Gb
求你了,别问我为什么要这么做,或者这是愚蠢的,或者是另一种哲学思想。
这是我的需要,如果可能的话,我只想找到一种方法。我在Linux Mint 17(大致为Ubuntu 14.04)x86_64上毫无错误地运行了你的程序。我的系统有8G内存,16G交换,页面缓存当前使用的大部分8G内存,进程当前使用的1-2GB内存 (顺便说一句,对于这样的问题,您确实需要详细指定您的平台。) 我可以用两种不同的方式重现您的错误消息 第一种方式:
$ ./mmap
8
0 Success
$ ulimit -v 65536
$ ./mmap
8
1 Cannot allocate memory
第二种方式(从新外壳):
那么,正如@vz0所问的,ulimit-a
说了什么
您有多少交换,使用了多少内存,以及您的系统如何设置vm.overmit\u内存
我要冒一点险,断言其中一个是你的罪魁祸首。好吧,你为什么要这么做?我知道你让我们不要问你这个问题,但知道你在努力完成什么可以帮助我们帮助你。我猜你可能有一个错误。什么是错误?这是秘密吗?你能少分配点吗?它开始失败的点在哪里?@Paul-这需要调试的敏锐性:通过改变东西来实际调查问题。这似乎已经脱离了SO海报的主题:(如果您在Linux上,请使用ulimit-a
$ ./mmap
8
0 Success
$ ulimit -v 65536
$ ./mmap
8
1 Cannot allocate memory
$ ./mmap
8
0 Success
$ sysctl vm.overcommit_memory
vm.overcommit_memory = 0
$ sudo sysctl vm.overcommit_memory=2
vm.overcommit_memory = 2
$ ./mmap
8
1 Cannot allocate memory