我有一个商店,如以下使用FREAD有效地读取数据稀疏
A1 B1 C1 ... A2 B2 C2 ... .... An Bn Cn ...
数据的文件在这里艾,Bi和词与16个字节的块。每个块Ai Bi Ci ...可能大于1M,n可能是256.我想依次读A1,A2 ... An,然后B1,B2 ... Bn ...
如果我使用fread A1,fseek到A2,fread A2,...,我猜测它浪费了很多IO带宽。 fread可以在每次调用时从磁盘读取4k字节,在执行完fseek之后,最后一个fread的缓存数据可能会丢失。读取完所有的As后,读取B1需要直接从磁盘读取,而不是缓存。
这个假设是否正确?我不确定文件系统是否可以很智能,并且仍然使用B1来保存缓存。如果文件系统无法帮助解决这个问题,我可能不得不将myfread作为fread的包装器,但将256 * 4k数据缓存在我自己的缓冲区中,因此下一轮读取Bs可以更快。 myfread从缓冲区中读取,直到它达到4k,然后它需要fread真实的数据。但我知道fread不是一个简单的API,myfread可以是一个简单的实现吗?我需要考虑文件系统的一致性吗?就我而言,我知道没有人在阅读时写下这些文件。