【问题标题】:Speed to create and read data创建和读取数据的速度
【发布时间】:2013-01-22 01:28:59
【问题描述】:

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

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

=> 如果在单独的文件中有数据并读取它,从原始文件读取它需要相同的时间? (假设我需要填充一个数组,最好在主程序上填充这个数组还是我可以从外部文件中无损读取?(不包括打开和关闭文件的时间))

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

【问题讨论】:

  • memcpy 这样的东西可能很快,但memcpy 一次只处理一个字节,所以像std::copy 这样的东西在某些情况下可能更快,而且可能不会更慢。
  • 在尝试优化之前分析您的代码...只有这样您才会知道诸如 memcpy 或文件操作的速度是否对您的操作来说太慢

标签: c++ c performance memory


【解决方案1】:

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

memcpy 取决于编译器,但是是的,一般来说,它会更快地完成,或者与您在不诉诸汇编的情况下所做的一样。

【讨论】:

    【解决方案2】:
    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 可能没有它。编译器还是有这个功能可以比较的。

    【讨论】:

      【解决方案3】:

      内存中的操作比 FILE IO 操作快很多命令,但您也许可以利用中间通道。

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

      【讨论】:

        猜你喜欢
        • 2012-12-25
        • 1970-01-01
        • 1970-01-01
        • 2013-04-20
        • 2013-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多