我对在 C/C++ 中创建和读取数据的速度有一些小问题:
=> 如果我需要在任何类型的数组中填充数据(考虑一个 2048*2048 数组),使用循环并填充每个单元格比从文件加载更快吗?(不包括打开和关闭文件所花费的时间)。
=> 如果在单独的文件中有数据并读取它,从原始文件读取它需要相同的时间?(假设我需要填充一个数组,最好在主程序中填充这个数组,或者我可以从外部文件中无损读取?(不包括打开和关闭文件的时间))
=> 如果我需要复制大量数据,Memcpy 仍然很快吗?
我对在 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 操作快很多命令,但是您也许可以利用中途的房子。
内存映射文件使用操作系统技术将文件的内容直接映射到内存,而无需读取和复制每个字节。然后,您可以正常读取/写入内存。它是许多架构中虚拟内存的基础,因此是高度优化和高性能的。