写入后CPU缓存线何时刷新到内存?

hat*_*h22 6 c# caching cpu-cache

我正在使用C#,并希望尽可能避免使用unsafe代码.如果我有一个大小足以填充缓存行的对象或数组,并且我想写入数组的对象或索引的每个字段,CPU是否会在刷新写入行之前等待所有写入操作或当只有一个或几个写入发生时,它会提前刷新吗?

如果我想只在所有写入行发生之后才发生刷新,那么我应该快速连续地在例程结束时执行所有写操作吗?我知道CPU和缓存一致性协议可能会有所不同,我正在寻找一个普遍真实的经验法则.

Guf*_*ffa 1

当然,CPU 会尝试尽可能少地进行内存访问,但这并不一定意味着“您的”内存块将按照您的意愿保留在缓存中。

通常,内存块将被读取一次并写入一次,但对此没有保证。可能会发生一些中断您的代码的事情,系统可能会决定刷新该缓存行以为其他内容腾出空间。整个内存区域甚至可能完全从内存中删除并刷新到磁盘,这样当您的代码继续时,它将导致页面错误,从而再次加载内存。

当然,让写入时间更近将使内存更有可能在该操作期间保留在缓存中。