我在 linux 上读过,程序内存布局可以大致如下可视化(我假设它在大多数其他操作系统上是相似的):
现在,我不确定我是否记错了,但我认为 CPU 一次就可以将相当大的相邻 RAM 地址块读取到它们最大的缓存级别中。如果是这样,从性能的角度来看,将程序的所有数据保持在尽可能短的内存范围内以防止缓存未命中是有意义的。
但是,如果是这种情况,最好将事情颠倒过来,将向上增长的部分(文本、全局数据和堆)放在向下增长的部分(cl args、env vars 和 stack)之上。但我想真相比那更复杂一点?如果数据段位于与堆栈完全不同的内存部分,这有什么关系吗?