假设我向某个文件 A 写入了一些内容,然后我使用
open("A", O_TRUNC | O_WRONLY);
关闭并重新打开该文件。之后,我再写同样的金额。
这会比不截断的程序慢吗?换句话说,截断是否也会删除文件内容的缓存行,意味着后续的写入操作将始终是缓存未命中?
这会比不截断的程序慢吗?
这似乎不太可能,但通常来说,衡量性能比预测更好。
换句话说, 截断还会删除文件内容的缓存行,意味着后续的写操作将永远是缓存未命中?
尚不清楚您认为写入文件如何从缓存中受益,这可能会受到截断的影响。 当您执行写入时,无论是写入 RAM 还是写入设备,系统不会将您正在写入的内容与已存在数据的模型进行比较。 任何类型的写入都会使写入目的地的任何现有缓存内容无效,因此多次写入相同数据不会给该端带来任何性能优势。 (编译器有时会沿着这些思路执行优化,可能会完全消除写入,但这与缓存 RAM 无关,并且不适用于对文件的写入。)
如果您要写入相同的数据两次,那么这可能会受益于缓存中的源数据,但这与目标文件无关,除非是暂时的,因为它的内容正在被读出以传输到文件。 数据不断地被缓存并从缓存中逐出,但是没有理由认为在打开时截断文件会对不相关对象的缓存产生任何特定的、可预测的影响。