这是我之前关于为什么需要 size_t 的问题的后续。
鉴于 size_t 保证足够大以表示您可以分配的内存块的最大大小(意味着仍然可以有一些大于 size_t 的整数),我的问题是......
是什么决定了您一次可以分配多少?
这是我之前关于为什么需要 size_t 的问题的后续。
鉴于 size_t 保证足够大以表示您可以分配的内存块的最大大小(意味着仍然可以有一些大于 size_t 的整数),我的问题是......
是什么决定了您一次可以分配多少?
您的机器的体系结构、操作系统(但两者是交织在一起的)和您的编译器/库集决定了您一次可以分配多少内存。
malloc
不需要能够使用操作系统可以给他的所有内存。操作系统不需要提供机器中存在的所有内存(例如,由于许可原因,各种版本的 Windows Server 具有不同的最大内存)
但请注意,操作系统可以提供比机器中的内存更多的内存,甚至比主板允许的内存更多(假设主板有一个内存插槽只能接受 1gb 记忆棒,Windows 仍然可以让一个程序分配 2gb 的内存)。这是通过使用虚拟内存、分页(你知道,交换文件、你的老朋友 :-) 或者,例如,通过使用NUMA来完成的。
在实际代码中,我可以想到三个约束: