C - 程序可以为自己分配多少内存 - 以及如何确定?

时间:2013-09-11 19:35:31

标签: c memory

可以从程序分配的内存量是否有限制?我的意思是,是否有任何程序保护,例如,在无限循环中分配内存?

malloc()的调用什么时候会返回NULL指针?

3 个答案:

答案 0 :(得分:7)

是的,有一个限制。这个限制取决于许多因素,包括(但不限于):

  • 程序的指令集(例如,32位二进制文​​件的地址空间小于64位二进制文​​件)。
  • 系统有多少内存空闲。 (“Memory”包括虚拟内存。)
  • 由系统管理员或特权进程设置的任何人为限制(例如,请参阅setrlimit()和(过时的)ulimit()功能)。

如果无法分配内存,malloc()将返回NULL。如果系统完全内存不足,则可能会强行终止您的进程。

答案 1 :(得分:4)

来自Wikipedia

  

可能分配的最大内存块malloc取决于   主机系统,特别是物理内存的大小和   操作系统实现。从理论上讲,数量最多   应该是size_t类型中可以保存的最大值   是一个表示大小的依赖于实现的无符号整数   一段记忆。最大值为2 CHAR_BIT × sizeof(size_t) − 1,或C99标准中的常量SIZE_MAX

答案 2 :(得分:3)

这取决于操作系统和标准库。

在Linux上,

  • 当地址空间不足时,malloc()将返回NULL

  • 当你的物理内存和交换空间都耗尽时,OOM杀手将运行并终止进程以释放内存。