PHP的hash_file是否在内部流式传输?

当我在一个大文件(5GB)上调用hash_file时,我注意到我的机器的内存使用率上升了.操作成功完成,但我想知道hash_file的内部实现是否将文件内容流式传输到哈希算法中,或者是否尝试首先将整个文件内容加载到内存中.有人知道吗?
最佳答案
它将整个内容映射到虚拟内存中.整个内容必须在物理内存中才能执行散列操作,但不能同时进行.与往常一样,机器的物理内存包含映射到虚拟内存的部分内容,由操作系统管理以最有效地使用物理内存.

如果你考虑一下,基本上不可避免的是,所有文件的内容在某个时刻都会通过物理内存,以便计算哈希值.必须由CPU处理文件的每个字节以产生散列,因此如果尚未在内存中则必须读取.如果有足够的物理内存,你可能希望它留在那里,因为一个常见的模式是在你对它进行哈希处理后再次读取同一个文件.

如果您散列的文件大于物理内存,则在读入新数据时必须丢弃一些数据.操作系统通过调整虚拟内存的哪些页面实际驻留在物理内存中来管理.包含文件系统中仍然可用的干净数据副本的页面可以从物理内存和用于保存新读取信息的物理内存中轻易丢弃.

转载注明原文:PHP的hash_file是否在内部流式传输? - 代码日志