C#vs C++;用于环路性能测量 踢,我想看看循环的C++的速度与循环的C++的速度是怎样的。我的测试是简单地在for循环上迭代100000次,100000次,然后平均结果

C#vs C++;用于环路性能测量 踢,我想看看循环的C++的速度与循环的C++的速度是怎样的。我的测试是简单地在for循环上迭代100000次,100000次,然后平均结果,c#,c++,performance,for-loop,C#,C++,Performance,For Loop,以下是我的C#实现: static void Main(string[] args) { var numberOfMeasurements = 100000; var numberOfLoops = 100000; var measurements = new List < long > (); var stopwatch = new Stopwatch(); for (var i = 0; i < numberOfMeasurem

以下是我的C#实现:

 static void Main(string[] args) {

    var numberOfMeasurements = 100000;
    var numberOfLoops = 100000;
    var measurements = new List < long > ();
    var stopwatch = new Stopwatch();

    for (var i = 0; i < numberOfMeasurements; i++) {
       stopwatch.Start();
       for (int j = 0; j < numberOfLoops; j++) {}
       measurements.Add(stopwatch.ElapsedMilliseconds);
    }

    Console.WriteLine("Average runtime = " + measurements.Average() + " ms.");
    Console.Read();
 }
void TestA()
{
    auto numberOfMeasurements = 100000;
    auto numberOfLoops = 100000;
    std::vector<long> measurements;

    for (size_t i = 0; i < numberOfMeasurements; i++)
    {
        auto start = clock();
        for (size_t j = 0; j < numberOfLoops; j++){}
        auto duration = start - clock();
        measurements.push_back(duration);
    }

    long avg = std::accumulate(measurements.begin(), measurements.end(), 0.0) / measurements.size();
    std::cout << "TestB: Time taken in milliseconds: " << avg << std::endl;

}

int main()
{
    TestA();
    return 0;
}
结果:
TestA:以毫秒为单位的时间:0

当我查看
测量值中的内容时,我注意到它充满了零。。。那么,这是什么问题呢?它是时钟吗?是否有更好/正确的方法来测量for循环?

没有“问题”。能够优化无用代码是C++的关键特性之一。由于内部循环不起任何作用,因此每个sane编译器都应该删除它

每日小贴士:只分析有意义的代码

如果你想了解一些关于微基准测试的知识,你可能会感兴趣。

正如“Baum-mit-Augen”已经说过的那样,编译器将删除不起任何作用的代码。这是“基准”C++代码时常见的错误。如果您创建某种基准函数,只计算一些永远不会使用(不会在代码中返回或以其他方式使用)的东西,那么同样的情况也会发生——编译器只会删除它

您可以通过不使用优化标志(如O2、Ofast等)来避免这种行为。因为没有人会用真实的代码来做,所以它不能显示C++的真实性能。
TL;DR 只需标出实际的生产代码。

循环可能被优化了,因为它是空的。显然,C++比C语言快得多。将计数器放入循环中,停止时钟后打印计数器的值。@Galik将被优化为
counter=numberOfLoopsnum=num*j,但结果是一样的。@pookie再次强调,只分析有意义的代码。C++编译器在消除无用代码方面投入了大量的工作。