编辑:在得到一些反馈后,我创建了一个新的例子,它应该更具可重复性.
我一直在用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)