为什么uintptr_t和intpr_t是C(和C++)标准中的可选类型?

Bo *_*o R 6 c c++ c99 c++11

使用C99(及更高版本的标准)标准需要在标题中提供某些类型<stdint.h>.对于确切的宽度,如int8_t,int16_t等...,它们是可选的,并在标准的动机这是为什么.

但对于uintptr_tintptr_t类型,它们也是可选的,但我没有看到它们是可选的而不是必需的原因.

use*_*670 7

在某些平台上,指针类型的大小比任何整数类型都大.我相信这样的平台的例子是IBM AS/400,虚拟指令集将所有指针定义为128位.

  • @BoR 当然,x86实模式怎么样,其中地址长为20位,但机器字大小为16位? (2认同)
  • @Oliv:必须有更多.2 ^ 128是~10 ^ 38.地球质量约为6*10 ^ 24千克.如果我们使用非常重的原子,其摩尔是1千克,那么地球有6*10 ^ 24*6*10 ^ 23 = 3.6*10 ^ 48个原子.至少,因为这是一个非常悲观的估计.这高于2 ^ 128.:) (2认同)
  • [宇宙中有大约10 ^ 80个估计的原子](https://www.wolframalpha.com/input/?i=number+of+atoms+in+the+observable+universe),这是[3*10] ^ 41倍于2 ^ 128](https://www.wolframalpha.com/input/?i=( +数字+ +原子+在+ +可观察+宇宙中)+%2F + 2%5E128): ) (2认同)
  • 这也适用于有界指针的实现,或者指针是某种对象 id、偏移量和其他可能启用内存安全实现的信息的元组。 (2认同)