Knuth 最近反对 64位系统,称对于适合4 GB内存的程序,"它们实际上会丢弃一半的缓存",因为指针是32位系统的两倍.
我的问题是:通过在64位计算机上安装32位操作系统可以避免这个问题吗?是否有任何带宽密集型基准测试证明了这种情况下的优势?
带宽在这里并不是正确的术语.Knuth真正谈论的是数据密度,因为它与缓存占用量有关.想象一下,你有一个16KB的L1数据缓存:如果你纯粹存储指针,你可以存储2 ^ 14/2 ^ 2 = 2 ^ 12 = 4096个32位指针,但只能存储2048个64位指针.如果应用程序的性能取决于能够跟踪超过2K的不同缓冲区,您可能会从32位地址空间中看到真正的性能优势.但是,大多数真正的代码都不是这种方式,缓存系统的真正性能优势通常来自于能够缓存常见的整数和浮点数据结构,而不是大量的指针.如果你的工作集没有指针重,那么64位的下行变得可以忽略不计,如果你'上升就会变得更加明显