我正在阅读有关C/C++ http://web.archive.org/web/20081006073410/http://www.embedded.com/columns/programmingpointers/200900195(通过Stackoverflow找到的链接)中的size_t
的文章。
从文章引用:
如何确定机器上最大可能物体的尺寸?
什么会影响最大对象(除了处理器之外)的大小?
欢迎提供详细说明的链接。
最佳答案
编辑:我认为重要的是要考虑到这种类型并不严格意味着您可以拥有该大小的对象-只是它是一个足以容纳最大可能对象的大小的整数-这并不意味着您可以使用SIZE_MAX
分配内存。它只是保证最大的对象不能比SIZE_MAX
大。
这是由编译器的实现决定的体系结构决定(通常基于编译器针对的操作系统,但是该操作系统可以提供比编译器更多的功能,或者该编译器可以支持的理论量要比操作系统更多允许,只是它会在您要求时失败)。
实际上,几乎总是由处理器来确定这一点-size_t
几乎总是与处理器的位匹配-例如,在32位处理器中为32位,在64位处理器中为64位。但是有可能设计一个在64位处理器上为32位的系统-一个“对象”不能大于4GB并不是一个很大的限制。这只是意味着您不能使用int
的单个 vector 来填充超过4GB,因此vector
中的条目(或4G char
条目)不得超过1G。
当然,另一个限制因素是可用内存-如果您有一台非常老的机器具有256MB的RAM,即使size_t
允许它也不允许您分配4GB。但是给同一台机器更多的内存,您可以使用更大的内存。
在许多32位系统上,应用程序允许的最大内存小于4GB(完整的32位范围),因为一部分内存被“保留”用于其他用途。同样,size_t
是32位,因此允许4GB,但实际上并不支持单个应用程序使用的全部内存-另一方面,一台32位计算机可能具有超过4GB的内存。 RAM,并在多个应用程序之间分配它。
另外,如果系统受限制(出于某些架构原因),例如,内存为16MB,则size_t
很可能仍是32位无符号整数-因为大多数处理器不执行24位整数(某些DSP可能会这样做) ,但常规的16或32位处理器则没有]。