当/ where /为什么size_t不是uint?

1 c++ compiler-construction implementation size-t uint

我一直在批评使用uint而不是使用size_t,但每次检查我正在使用的工具链时,结果都size_t被定义为uint.

是否有任何编译器实现size_t实际上不是uint?批评的理由是什么?

Mat*_*son 6

size_t 是"匹配您可以在机器中使用的最大可能地址范围的大小"(或某些词语大致相同的效果).

特别是,size_t64位机器上为64位,32位系统上为32位.

我假设uint是缺少的unsigned int,这通常是32位(这些天,一些较旧的系统将使用16位整数).因此,在64位系统上,unsigned int仍然是32位,尽管内存分配,字符串等的大小可能大于32位 - 如果您尝试使用uint该大小,这将导致问题.

  • @ user2341104:虽然int的初衷确实与自然寄存器大小相匹配,接近64位的许多ABI认为这将是非常浪费并使其成为32位甚至64位注册平台 (2认同)