再一次,我发现自己有一套破碎的假设。这篇文章本身是关于通过修改一个经过验证的最佳算法来考虑虚拟内存的 10 倍性能提升:
在以千兆赫时钟频率运行的现代多问题 CPU 上,最坏情况下的损失是每个 VM 页面错误几乎 1000 万条指令。如果您使用旋转磁盘运行,那么这个数字更像是 1 亿条指令。
如果这些操作导致页面错误和缓慢的磁盘操作,那么 O(log2(n)) 算法有什么好处?对于大多数相关数据集,避免页面错误的 O(n) 甚至 O(n^2) 算法将围绕它运行。
周围还有更多这样的算法吗?我们是否应该重新审视我们教育的所有这些基本组成部分?自己写的时候还需要注意什么?
澄清:
所讨论的算法并不比经过验证的最优算法快,因为 Big-O 表示法存在缺陷或毫无意义。它更快,因为经过验证的最佳算法依赖于现代硬件/操作系统中不正确的假设,即所有内存访问都是平等的和可互换的。