假设进程中有足够的虚拟内存地址。
考虑到 64 位系统几乎具有无限的虚拟地址,如果操作系统内存池中仍有可用的物理内存空间,我们可以假设内存分配不会失败吗?
考虑到 64 位系统几乎具有无限的虚拟地址,如果操作系统内存池中仍有可用的物理内存空间,我们可以假设内存分配不会失败吗?
operator new
,它们通常基于较低级别的系统调用,如mmap(2)...)。当然,资源并不是无限的(最多是物理RAM + 交换空间)。 void* p = malloc(somesize);
if (!p) { perror("malloc"); exit(EXIT_FAILURE); };
_exit
或abort
,如果你担心通过atexit(3)注册的终止器会执行malloc
...但我不会管它。xmalloc
。new(std::nothrow)
,则会给出nullptr
,详见std::nothrow)。
了解有关Linux上内存超额配置,虚拟内存以及如Joachim Pileborg所评论的内存碎片化的更多信息。阅读垃圾回收的相关内容。