numa_alloc_onnode() 分配的内存更多吗?

Posted

技术标签:

【中文标题】numa_alloc_onnode() 分配的内存更多吗?【英文标题】:numa_alloc_onnode() allocates memory more then it can? 【发布时间】:2014-06-23 03:32:44 【问题描述】:

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

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

谁能帮忙解释一下?

【问题讨论】:

您分配 40G x sizeof(int) 而不是 40GB(假设 GB_8 为 8GB)。但这并不能回答问题 我想见你printf("0x%llX\n", (sizeof(int) * GB_8 * 5)); 对不起,GB_8 = 8*1024*1024*1024/4,我已经除以4了。 【参考方案1】:

直到你真正尝试在那个记忆中存储一些东西,它只是蒸汽,想象的......甚至是虚拟的!

系统会说,SURE!你的名字里可以有这么多……但在你使用它之前,这一切都只是“纸上谈兵”。

如果您要尝试在 40+GB 的内存中存储一​​些东西,那么您很可能会遇到错误...取决于此时您的交换空间的大小。

overcommit 的前三个 Google 命中:

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

请记住,在您在那里存储一些东西之前,这一切都是虚构的。

【讨论】:

以上是关于numa_alloc_onnode() 分配的内存更多吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在特定的 NUMA 内存节点上实例化 C++ 对象?

c语言分配内存方式都有哪些

Golang 1.14中内存分配、清扫和内存回收

c语言中啥是动态分配内存?

C内存分配

内存分配(malloc)的过程