是什么决定了可以分配多少内存?

时间:2011-10-21 14:01:01

标签: c memory-management size-t

这是关于为什么size_t是必要的my previous question的后续行动。

鉴于size_t保证足够大以表示你可以分配的内存块的最大大小(意味着仍然有一些大于size_t的整数),我的问题是......

什么决定了你可以一次分配多少钱?

2 个答案:

答案 0 :(得分:3)

您的机器的体系结构,操作系统(但两者交织在一起)和您的编译器/库集确定了您可以一次分配多少内存。

malloc没有需要能够使用操作系统可以给他的所有内存。操作系统不需要以提供计算机中存在的所有内存(例如,各种版本的Windows Server具有不同的最大内存 for licensing reasons )< / p>

但请注意,操作系统可以提供比机器中存在的内存更多的内存,甚至比主板允许的内存更多(假设主板有一个内存插槽,只接受1GB的记忆棒,Windows仍然可以让程序分配2GB的内存)。这是通过使用虚拟内存,分页(你知道,交换文件,你的老朋友和慢朋友:-)或者,例如,通过使用NUMA完成的。

答案 1 :(得分:0)

我可以在实际代码中考虑三个约束:

  • 最大的unsigned int size_t能够分配。 size_t应该是OS'内存分配机制使用的相同类型(相同大小等)。
  • 操作系统能够在RAM中处理的最大块(块的大小如何表示?这种表示如何影响最大块大小?)。
  • 内存碎片(最大空闲块)和可用总RAM。