创建和读取数据的速度

Speed to create and read data

本文关键字:速度 数据 读取 创建      更新时间:2023-10-16

我对在 C/C++ 中创建和读取数据的速度有一些小问题:

=>如果我需要在任何类型的数组中填充数据(想想 2048*2048 数组),使用循环并填充每个单元格比从文件加载它更快?(不包括打开和关闭文件所花费的时间)。

=> 如果数据在单独的文件中并读取它,那么从原始文件中读取数据的成本相同?(想象一下我需要填充一个数组,最好在主程序上填充这个数组,还是我可以从外部文件中读取而不会丢失?(不包括打开和关闭文件的时间))

=> 如果我需要复制大量数据,Memcpy 仍然很快?

文件操作将 比内存操作慢很多很多倍。

memcpy 取决于编译器,但是是的,一般来说,它会做得更快或与您一样,而无需诉诸汇编。

If I need to fill data in a array of any type (think about a 2048*2048 array), using a loop and fill each cell is faster then loading it from a file? (excluding time spent to open and close the file).

当您不从文件中读取时,在哪里填写数据?但一般来说,从文件中读取非常慢。当主内存上的读取几乎是原子的时,对文件执行相同的操作比 1000 倍或更多慢。在实践中,如果没有必要,请始终防止从文件中读取。

如果我需要复制大量数据,Memcpy仍然很快?

通常它更快,取决于编译器和你的硬件。 因为memcpy使用一些特殊的 CPU 指令,例如 SIMD(单次入侵 - 乘以数据)来提高性能,也许你的 CPU 没有它。编译器仍然具有可比的此功能。

内存中操作比 FILE IO 操作快许多顺序,但您可能能够利用半途而废的房子。

内存

映射文件使用操作系统技术将文件的内容直接映射到内存,而无需读取和复制每个字节。然后,您可以正常读取/写入内存。它是许多架构中虚拟内存的基础,因此具有高度优化和高性能。