【发布时间】:2015-08-07 14:35:20
【问题描述】:
我尝试在 FreeBSD-x64 内核空间分配大内存,但它返回 NULL。
void *ptr = NULL;
static int
init_module(void)
{
u_long SIZE_ALLOC = ((u_long)2500 * 1024 * 1024);
ptr = malloc(SIZE_ALLOC, M_DEVBUF, M_NOWAIT);
if( !ptr )
uprintf("Allocation has been failed!!\n");
return (0);
}
我有足够的RAM(8 [GB])并且我有足够的空闲内存,但它返回NULL。
如果我在用户空间运行此代码,它可以正常工作并捕获大量内存,但对于内核空间它会失败!!!!
错误在哪里,我该如何解决?
【问题讨论】:
-
64 位进程?它将尝试分配一个连续的内存范围。如果有碎片,它会失败,即使当您将所有单独的空闲空间相加时它总共有足够的空闲空间。
-
我认为内核空间的上限不一定要与您系统的RAM空间匹配。好奇的问题,为什么需要分配这么大的内存?
-
@Robinson 是的,可能它正在寻找一个连续的内存范围。
-
特殊内存池需要它。
-
是的,我需要连续的内存范围。为什么这在用户空间可以正常工作,但对于内核空间有问题?我有大约 6 [GB] 的可用空间。
标签: c++ c memory memory-management freebsd