创建和读取数据的速度

时间:2013-01-22 01:29:00

标签: c++ c performance memory

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

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

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

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

3 个答案:

答案 0 :(得分:4)

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

memcpy取决于编译器,但是,通常情况下,它可以更快或更好地完成它而不需要求助于汇编。

答案 1 :(得分:0)

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).

当你没有从文件中读取数据时,你要填写哪些数据?但总的来说,从文件读取速度非常慢。当在主存储器上读取几乎是原子的时,文件上的相同操作慢于1000x或更多。在实践中,如果没有必要,总是要防止从文件中读取。

  

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

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

答案 2 :(得分:0)

内存中的操作比FILE IO操作的订单快很多,但您可以使用中途的房屋。

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