可以从程序分配的内存量是否有限制?我的意思是,是否有任何程序保护,例如,在无限循环中分配内存?
对malloc()
的调用什么时候会返回NULL指针?
答案 0 :(得分:7)
是的,有一个限制。这个限制取决于许多因素,包括(但不限于):
setrlimit()
和(过时的)ulimit()
功能)。如果无法分配内存,malloc()
将返回NULL
。如果系统完全内存不足,则可能会强行终止您的进程。
答案 1 :(得分:4)
来自Wikipedia,
可能分配的最大内存块
malloc
取决于 主机系统,特别是物理内存的大小和 操作系统实现。从理论上讲,数量最多 应该是size_t
类型中可以保存的最大值 是一个表示大小的依赖于实现的无符号整数 一段记忆。最大值为2CHAR_BIT × sizeof(size_t)
− 1
,或C99标准中的常量SIZE_MAX
。
答案 2 :(得分:3)
这取决于操作系统和标准库。
在Linux上,
当地址空间不足时,malloc()
将返回NULL
。
当你的物理内存和交换空间都耗尽时,OOM杀手将运行并终止进程以释放内存。