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

she*_*lbc 3 c memory

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

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

cdh*_*wie 7

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

  • 程序的指令集(例如,32位二进制文​​件的地址空间小于64位二进制文​​件).
  • 系统有多少内存空闲.("Memory"包括虚拟内存.)
  • 由系统管理员或特权进程设置的任何人为限制(例如,参见setrlimit()和(废弃)ulimit()函数).

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


Jac*_*cob 6

来自维基百科

\n\n
\n

可以分配的最大可能内存块malloc取决于主机系统,特别是物理内存的大小和操作系统实现。理论上,最大数字应该是类型中可以保存的最大值size_t,它是一个与实现相关的无符号整数,表示内存区域的大小。最大值为 2 ,即C99 标准中的常数。CHAR_BIT \xc3\x97 sizeof(size_t)\n \xe2\x88\x92 1SIZE_MAX

\n
\n


Die*_*Epp 3

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

在 Linux 上,

  • 当你用完地址空间时,malloc()将返回NULL

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