这个问题的答案取决于我们愿意离实际考虑有多远.
最终,从理论上讲,C和C++中的一切都依赖于编译器,而仅仅依赖于编译器.硬件/操作系统根本不重要.编译器可以自由实现any厚度的硬件抽象层,并完全模拟任何东西.没有什么可以阻止C或C++实现任何大小和任何表示形式的int
类型,只要它足够大以满足语言标准中指定的最低要求即可.这种抽象层的实际示例很容易获得,例如基于诸如Java的"虚拟机"平台的编程语言.
然而,C和C++的目的是高度efficient种语言.为了达到最高效率,C或C++实现必须考虑来自底层硬件的某些考虑.因此,确保每个基本类型都基于硬件直接(或几乎直接)支持的某种表示非常有意义.从这个意义上说,基本类型的大小确实取决于硬件.
换言之,对于64位硬件/ OS平台,特定的C或C++实现完全可以自由地实现int
,作为占用128位内存的71位1’s补符号整数类型,使用其他57位作为存储编译器作者女友的生日所需的填充位.这种实现甚至具有一定的实用价值:它可以用来执行C/C++程序可移植性的运行时测试.但这就是该实现的实际用途的终结.不要期望在"普通"C/C++编译器中看到这样的情况.