我听说过很多关于这个主题的冲突信息,但总的来说我听说Int类型应该与平台字大小有关,所以例如在32位机器中Int有4个字节.
除了我在童年时开始在DOS上编码时,我认为我的编译器已经使用了32位Int,即使目标是16位处理器(如286)需要不断使用短路......
今天我编写了一个64bit的程序只是为了踢,而Int仍然结束了32位(短16位,我没有长时间测试).
我知道C标准定义了这个:short <= int <= long但我很好奇,发生了什么?为什么每个人都决定使用一些任意大小的int?
这在过去是正确的,当时内存总线大小与处理器寄存器大小具有相同的宽度。但这种情况不久前就不再成立了,Pentium 是您在标准硬件上找到的第一个处理器,其中内存总线大小变得更大,对于 32 位处理器来说是 64 位。提高总线吞吐量的简单方法。
内存是一个非常重要的瓶颈,它比处理器的执行核心慢得多。与距离相关的问题是,电信号传输的距离越远,在不损坏信号的情况下以高频切换信号就越困难。
因此,处理器缓存的大小以及程序使用它们的效率在很大程度上决定了程序的执行速度。高速缓存未命中很容易耗费数百个CPU 周期。
您的 64 位处理器没有获得双倍的缓存大小,无论您的程序在 32 位还是 64 位模式下执行,L1 仍然是 32KB 指令和 32KB 数据。芯片上的可用空间,最重要的是,缓存和执行引擎之间的距离是物理约束,由工艺技术的特征尺寸决定。
因此,将int转换为 64 位虽然编译器很容易做到,但它对程序速度非常不利。这样的程序使用缓存的效率要低得多,并且在等待内存总线时会遭受更多的停顿。
64 位的主要数据模型是 LLP64(Microsoft 的选择)和 LP64(*nix 操作系统的选择)。两者都对int使用 32 位,LLP64 对long使用 32 位,LP64 使其成为 64 位。long long两者都是 64 位。
| 归档时间: |
|
| 查看次数: |
149 次 |
| 最近记录: |