这个问题的答案取决于我们愿意得到多远的实际考虑。
从理论上讲,C和C+中的一切都取决于编译器,而仅仅取决于编译器。硬件/操作系统一点也不重要。编译器可以自由地实现任何厚度和绝对模仿任何东西。没有什么可以阻止C或C+实现int
任何大小的类型和任何表示形式,只要它足够大以满足语言标准中规定的最低要求。这种抽象级别的实用示例是现成的,例如基于“虚拟机”平台的编程语言,如Java。
然而,C和C+的意图是高度高效率语言。为了达到最大的效率,C或C+实现必须考虑从底层硬件派生的某些考虑因素。因此,确保每个基本类型都基于硬件直接(或几乎直接)支持的某种表示是很有意义的。从这个意义上说,基本类型的大小确实取决于硬件。
换句话说,64位硬件/OS平台的特定C或C+实现是完全免费的。int
作为一个71位1的补码符号整数类型,占用128位内存,使用其他57位作为填充位,这是总是需要存储编译器作者的女朋友的生日。这种实现甚至具有一定的实用价值:它可以用于执行C/C+程序可移植性的运行时测试。但这正是实现的实际效用所在。不要指望在“普通”C/C+编译器中看到类似的东西。