numa_alloc_onnode()分配内存多,然后它可以?

问题描述:

我尝试使用numa_alloc_onnode()通过运行下面的代码在32GB节点上分配40GB的内存。但它不会报告任何错误。numa_alloc_onnode()分配内存多,然后它可以?

a = (int *) numa_alloc_local (sizeof(int) * GB_8 * 5); 
if (a == NULL) 
    printf("a error\n"); 
for (i = 0; i <GB_8*5; i++) 
    a[i] = (int)i; 
printf("a done\n"); 

这是我的机器的规格。 http://i.stack.imgur.com/bM2Gr.png

任何人都可以请帮忙解释一下吗?

+0

您分配40G x sizeof(int)而不是40GB(前提是GB_8是8GB)。但是,这并没有回答这个问题 –

+0

我想看看你'printf(“0x%llX \ n”,(sizeof(int)* GB_8 * 5));' –

+0

对不起,混淆,GB_8 = 8 * 1024 * 1024 * 1024/4,我已经把它除以4。 – user3743384

直到你真的尝试在内存中存储某些东西,它只是蒸气,想象......甚至虚拟!

系统会说,确定!你可以用你的名字得到那么多......但在使用它之前,它只是'纸上'。

如果您尝试在所有40 GB内存中存储某些内容,那么您很可能会遇到错误...取决于此时交换空间的大小。

前三谷歌命中overcommit

https://www.kernel.org/doc/Documentation/vm/overcommit-accounting http://www.win.tue.nl/~aeb/linux/lk/lk-9.html http://searchservervirtualization.techtarget.com/definition/memory-overcommit

只要记住,直到你存储的东西在那里,它的所有虚反正。