0

这是我之前关于为什么需要 size_t 的问题的后续。

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

是什么决定了您一次可以分配多少?

4

2 回答 2

3

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

malloc不需要能够使用操作系统可以给他的所有内存操作系统不需要提供机器中存在的所有内存(例如,由于许可原因,各种版本的 Windows Server 具有不同的最大内存)

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

于 2011-10-21T14:05:04.140 回答
0

在实际代码中,我可以想到三个约束:

  • 最大的 unsigned int size_t 能够分配。size_t 应该是操作系统的内存分配机制正在使用的相同类型(相同大小等)。
  • 操作系统能够在 RAM 中处理的最大块(如何表示块的大小?这种表示如何影响最大块大小?)。
  • 内存碎片(最大的可用块)和可用的总可用 RAM。
于 2011-10-21T14:08:11.803 回答