相关疑难解决方法(0)

在C++中迭代链表比在Go中慢

编辑:在得到一些反馈后,我创建了一个新的例子,它应该更具可重复性.

我一直在用C++编写一个涉及大量链表迭代的项目.为了获得基准,我在Go中重写了代码.令人惊讶的是,我发现即使将-O标志传递给clang ++之后,Go实现仍然以大约10%的速度运行.可能我只是错过了C++中的一些明显的优化,但是我一直在用一些调整来敲打墙壁.

这是一个简化版本,在C++和Go中具有相同的实现,其中Go程序运行得更快.它所做的只是创建一个包含3000个节点的链表,然后计算在此列表上迭代1,000,000次所需的时间(在C++中为7.5秒,在Go中为6.8).

C++:

#include <iostream>
#include <chrono>

using namespace std;
using ms = chrono::milliseconds;

struct Node {
    Node *next;
    double age;
};

// Global linked list of nodes
Node *nodes = nullptr;

void iterateAndPlace(double age) {
    Node *node = nodes;
    Node *prev = nullptr;

    while (node != nullptr) {
        // Just to make sure that age field is accessed
        if (node->age > 99999) {
            break;
        }

        prev = node;
        node = node->next;
    }

    // Arbitrary action …
Run Code Online (Sandbox Code Playgroud)

c++ optimization go

7
推荐指数
1
解决办法
266
查看次数

标签 统计

c++ ×1

go ×1

optimization ×1