草庐IT

c++ - 为什么用 C 复制文件比 C++ 快得多?

我已经在一个相当大的C++项目上工作了几个星期。我最初的目标是使用这个项目来了解C++11,并且只使用纯C++代码,避免手动分配和C构造。但是,我认为这个问题将迫使我将C用于一个小功能,我想知道为什么。基本上我有一个保存功能,它会在我对其中的数据进行更改之前将一个较大的二进制文件复制到一个单独的位置。文件本身是最大大小约为700MB的CD镜像。这是我使用的原始C++代码:std::ios::sync_with_stdio(false);std::ifstreamin(infile,std::ios::binary);std::ofstreamout(outfile,std::ios::

c++ - 为什么 std::u16string 比 char16_t 数组慢?

经过一些性能实验,似乎使用char16_t数组有时可以将性能提高40-50%,但似乎使用std::u16string而不进行任何复制和分配应该与C数组一样快。然而,基准测试显示相反。这是我为基准测试编写的代码(它使用GoogleBenchmark库):#include"benchmark/benchmark.h"#includestaticstd::u16stringstr;staticchar16_t*str2;staticvoidBM_Strings(benchmark::State&state){while(state.KeepRunning()){for(size_ti=0;i

c++ - 为什么 std::u16string 比 char16_t 数组慢?

经过一些性能实验,似乎使用char16_t数组有时可以将性能提高40-50%,但似乎使用std::u16string而不进行任何复制和分配应该与C数组一样快。然而,基准测试显示相反。这是我为基准测试编写的代码(它使用GoogleBenchmark库):#include"benchmark/benchmark.h"#includestaticstd::u16stringstr;staticchar16_t*str2;staticvoidBM_Strings(benchmark::State&state){while(state.KeepRunning()){for(size_ti=0;i

c# - float 比双倍慢吗? 64位程序运行速度比32位程序快吗?

使用float类型是否比使用double类型慢?我听说现代Intel和AMDCPU使用double计算比使用float更快。标准数学函数(sqrt、pow、log、sin、cos等)?以单精度计算它们应该会快得多,因为它应该需要更少的浮点运算。例如,单精度sqrt可以使用比doublesqrt更简单的数学公式。另外,我听说标准数学函数在64位模式下更快(在64位操作系统上编译和运行时)。对此有什么明确的答案? 最佳答案 经典的x86架构使用浮点单元(FPU)来执行浮点计算。FPU在其内部寄存器中执行所有计算,每个寄存器都有80位精度

c# - float 比双倍慢吗? 64位程序运行速度比32位程序快吗?

使用float类型是否比使用double类型慢?我听说现代Intel和AMDCPU使用double计算比使用float更快。标准数学函数(sqrt、pow、log、sin、cos等)?以单精度计算它们应该会快得多,因为它应该需要更少的浮点运算。例如,单精度sqrt可以使用比doublesqrt更简单的数学公式。另外,我听说标准数学函数在64位模式下更快(在64位操作系统上编译和运行时)。对此有什么明确的答案? 最佳答案 经典的x86架构使用浮点单元(FPU)来执行浮点计算。FPU在其内部寄存器中执行所有计算,每个寄存器都有80位精度

c++ - i++ 比++i 效率低,如何显示?

我试图通过示例说明前缀增量比后缀增量更有效。理论上这是有道理的:i++需要能够返回未递增的原始值并因此存储它,而++i可以返回递增的值而不存储先前的值。但是在实践中是否有一个很好的例子来证明这一点?我尝试了以下代码:intarray[100];intmain(){for(inti=0;i我使用gcc4.4.0像这样编译它:gcc-Wa,-adhls-O0myfile.cpp我又做了一次,将后缀增量改为前缀增量:for(inti=0;i两种情况下的结果是相同的汇编代码。这有点出乎意料。似乎通过关闭优化(使用-O0),我应该看到展示概念的不同之处。我错过了什么?有更好的例子来说明这一点吗?

c++ - i++ 比++i 效率低,如何显示?

我试图通过示例说明前缀增量比后缀增量更有效。理论上这是有道理的:i++需要能够返回未递增的原始值并因此存储它,而++i可以返回递增的值而不存储先前的值。但是在实践中是否有一个很好的例子来证明这一点?我尝试了以下代码:intarray[100];intmain(){for(inti=0;i我使用gcc4.4.0像这样编译它:gcc-Wa,-adhls-O0myfile.cpp我又做了一次,将后缀增量改为前缀增量:for(inti=0;i两种情况下的结果是相同的汇编代码。这有点出乎意料。似乎通过关闭优化(使用-O0),我应该看到展示概念的不同之处。我错过了什么?有更好的例子来说明这一点吗?

c++ - 为什么我基于堆栈的代码实现比递归慢得多?

我有一棵树,其节点存储-1或非负整数,即顶点名称。每个顶点在树中最多出现一次。以下函数是我代码中的瓶颈:版本A:voidnode_vertex_members(node*A,vector*vertexList){if(A->contents!=-1){vertexList->push_back(A->contents);}else{for(inti=0;ichildren.size();i++){node_vertex_members(A->children[i],vertexList);}}}B版:voidnode_vertex_members(node*A,vector*verte

c++ - 为什么我基于堆栈的代码实现比递归慢得多?

我有一棵树,其节点存储-1或非负整数,即顶点名称。每个顶点在树中最多出现一次。以下函数是我代码中的瓶颈:版本A:voidnode_vertex_members(node*A,vector*vertexList){if(A->contents!=-1){vertexList->push_back(A->contents);}else{for(inti=0;ichildren.size();i++){node_vertex_members(A->children[i],vertexList);}}}B版:voidnode_vertex_members(node*A,vector*verte

c++ - 为什么 C 数组比 std::array 快这么多?

这个问题在这里已经有了答案:WhydoIhavetoturnonoptimizationing++forsimplearrayaccess?(1个回答)关闭5年前。我们目前正在用C++编写一些对性能至关重要的代码,这些代码可在许多大型矩阵和vector上运行。关于我们的研究,std::array和标准C数组之间应该没有太大的性能差异(见Thisquestion或this)。然而,在测试过程中,通过使用C数组而不是std::array,我们体验到了巨大的性能提升。这是我们的演示代码:#include#include#include#defineROWS784#defineCOLS100#