带宽在这里并不是正确的术语.Knuth真正谈论的是数据密度,因为它与缓存占用量有关.想象一下,你有一个16KB的L1数据缓存:如果你纯粹存储指针,你可以存储2 ^ 14/2 ^ 2 = 2 ^ 12 = 4096个32位指针,但只能存储2048个64位指针.如果应用程序的性能取决于能够跟踪超过2K的不同缓冲区,您可能会从32位地址空间中看到真正的性能优势.但是,大多数真正的代码都不是这种方式,缓存系统的真正性能优势通常来自于能够缓存常见的整数和浮点数据结构,而不是大量的指针.如果你的工作集没有指针重,那么64位的下行变得可以忽略不计,如果你'上升就会变得更加明显
答案是:是的,在一定程度上可以,尽管性能差异不太可能很大。
任何测试这一点的基准都必须进行大量的指针解析,这将很难从噪声中分离出来。设计一个不会优化的基准测试是很困难的。 这篇关于有缺陷的 Java 基准测试的文章是由某人在回答另一个问题时发布的,但其中描述的许多原则也适用于此。