在像C这样的低级语言中,我知道你应该尝试尽可能地利用CPU缓存来获益。由于高速缓存未命中意味着您的程序将暂时等待RAM取消引用指针。然而写入内存也受此影响吗?如果你写入内存,似乎CPU不需要等待响应。
当我需要重复访问某些组中的数组中的项目时,我正在尝试重新排序一系列项目是否真的值得(因此根据这些组进行排序)。然而,这些组将经常更改,所以如果我这样做,我将需要继续重新排序数组。
答案 0 :(得分:0)
根据您的体系结构,随机内存写入的成本至少有两个原因。
在今天的多核机器上,几乎所有的写操作都需要运行某种缓存一致性协议,以便其他缓存上的相应缓存行无效。
就普通写入而言,它们要么总是花费内存操作,要么有时会导致内存操作,具体取决于缓存是直写还是回写。
您可以在Wikipedia上阅读有关缓存可能行为的更多详细信息。
答案 1 :(得分:-2)
这是一个非常广泛的问题,所以我的答案几乎一样广泛。
在读取和写入内存时,源代码,已编译代码和底层硬件不一定全部同步。您的C / C ++代码只是引用变量。编译后的代码会将其转换为接近源代码的适当机器语言,但在优化,volatile关键字等情况下可能会有所不同。最后,硬件将优化3个主要存储级别:CPU缓存(最快),RAM和硬盘(是的,你的程序变量实际上可以存储在硬盘上,在交换的情况下)。
CPU是否等待部分取决于硬件层与机器代码结合的情况(例如,再次考虑指定为volatile的数据)。