dav*_*nal 5 c size int history long-integer
根据无数的答案在这里,long
并int
在对C和C++通用平台尺寸32位(Windows和Linux上,32和64位).(我知道,没有标准,但在实践中,这些都是观察尺寸).
所以我的问题是,这是怎么发生的?为什么我们有两种尺寸相同的类型?我以前总是假设long
大部分时间都是64位,而且int
我不是说"应该"是这样或那样的,我只是好奇我们是如何到达这里的.
从历史上看,C中的大多数尺寸和类型都可以追溯到PDP-11架构.它有字节,字(16位)和双字(32位).当C和UNIX被移动到另一台机器(我认为是Interdata 832)时,字长为32位.保持源兼容,long
并int
严格定义
sizeof(short)
≤sizeof(int)
≤sizeof(long)
.
大多数机器现在最终都是sizeof(int)
= sizeof(long)
因为16位不再方便,但是如果需要的话,我们很长时间才能得到64位.
严格更新我应该说"编译器",因为不同的编译器implmentors可以为相同的指令集架构做出不同的决定.例如,海湾合作委员会和微软.
从6.2.5节的C99原理(PDF):
[...]在20世纪70年代,16位C(用于PDP-11)首先用16位整数表示文件信息,这些整数很快就被磁盘进展所淘汰.人们切换到32位文件系统,首先使用的
int[2]
结构不仅笨拙,而且还无法有效地移植到32位硬件.为了解决这个问题,将
long
类型添加到语言中,即使这需要PDP-11上的C生成多个操作来模拟32位算术.即使32位小型计算机与16位系统一起使用,人们仍然习惯于int
效率,保留long
真正需要更大整数的情况,因为long
在16位系统上效率明显降低.二者short
并long
加入到C,使short
可用于16位,long
为32位,并int
作为方便的性能.不希望将数字16或32锁定到语言中,因为存在至少24位和36位CPU的C编译器,而是根据需要提供可用于32位的名称.PDP-11 C可能已经
int
以32位重新实现,因此无需使用long
; 但会作出改变人们的大多数使用int
到short
或遭受的PDP-11S严重的性能下降.除了对源代码的潜在影响之外,即使在1976年,对现有目标代码和数据文件的影响也会更糟.到了20世纪90年代,由于安装了大量软件,并且广泛使用动态链接库,在现有环境中更改公共数据对象大小的影响是如此之高,以至于很少有人会容忍它,尽管在创建新环境时可能会接受.因此,为避免命名空间冲突,许多供应商使用新名称在其32位C环境中添加了64位整数,其中long long
使用最广泛的名称.[...]