new*_*int 3 c c++ cpu size-t size-type
我正在阅读size_tC/C++中的文章http://web.archive.org/web/20081006073410/http://www.embedded.com/columns/programmingpointers/200900195(通过Stackoverflow找到的链接).
从文章引用:
类型size_t是一个typedef,它是某些无符号整数类型的别名,通常是unsigned int或unsigned long,但可能是unsigned long long.每个标准C实现都应该选择足够大的无符号整数 - 但不要大于需要 - 来表示目标平台上最大可能对象的大小.
如何确定机器上最大可能对象的大小?
什么影响最大对象的大小(除了处理器)?
欢迎详细解释链接.
编辑:我认为重要的是要考虑到这种类型并不严格意味着你可以有一个这样大小的对象 - 只是它是一个足够大的整数来保持最大可能对象的大小 - 这并不意味着你可以SIZE_MAX用来分配内存.它只是保证最大可能的对象不能比最大的对象更大SIZE_MAX.
这是由编译器执行的架构决策(通常在回合制的编译器靶向操作系统上,但比编译器的OS可以提供更多的,或者编译器可以支持一个理论值比操作系统更多允许,只是当你要求时它会失败).
实际上,几乎总是处理器决定了这一点 - size_t几乎总是匹配处理器的位数 - 例如32位处理器中的32位和64位处理器中的64位.但是有可能在64位处理器上设计一个32位的系统 - 一个"对象"不能大于4GB并不是那么大的限制.它只是意味着您不能使用单个向量int来填充超过4GB,因此vector(或4G char条目)中不超过1G条目.
当然,另一个限制因素是可用内存 - 如果你有一台装有256MB内存的旧机器,它就不会允许你分配4GB,即使size_t它允许它.但是给同一台机器更多的内存,你可以去更大的尺寸.
在许多32位系统上,应用程序允许的最大内存小于4GB(完整的32位范围),因为某些部分内存被"保留"用于其他用途.如此反复,则size_t是32位,因此将允许4GB,但它实际上并没有支持到单个应用程序中使用足量的记忆-在另一方面,一个32位的机器可能有超过4GB的内存更,并在多个应用程序之间进行分配.
此外,如果系统受限(出于某些架构原因),比如16MB的内存,size_t很可能仍然是32位无符号整数 - 因为大多数处理器不执行24位整数[某些DSP可能会这样做,但常规的16位或32位处理器没有].