为什么 NodeJS C/C++ 插件比纯 C 更快
Why is NodeJS C/C++ addon faster then pure C
我尝试使用NodeJS插件,我在C语言中有以下代码:
int fib(int n) {
if (n == 0) return 0;
else if (n == 1) return 1;
else return (fib(n-1) + fib(n-2));
}
int main(int argc, char *argv[]) {
fib(atoi(argv[1]));
}
在 NodejS 插件中:
.JS:
const addon = require('./build/Release/addon');
console.log(addon.fib(process.argv[2]));
C++:
using namespace v8;
int fib(int n) {
if (n == 0) return 0;
else if (n == 1) return 1;
else return (fib(n-1) + fib(n-2));
}
void Method(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
args.GetReturnValue().Set(Uint32::New(isolate, fib(args[0]->Uint32Value())));
}
void init(Local<Object> exports) {
NODE_SET_METHOD(exports, "fib", Method);
}
NODE_MODULE(addon, init)
我尝试计算数字 50 的 fib(( 并得到以下结果:
- 清洁 C: 2m 36s
- NodeJS 插件:1 分 22 秒
谁能解释为什么 NodeJS 插件比纯 C 更快?我不是C/C++专家,但我认为纯C会更快。
谢谢!
很可能
您手动编译了C
程序,而没有指定-O3
或其他优化选项。虽然node-gyp
或任何工具来编译 Node.js插件肯定是在打开最大优化的情况下编译的。
相关文章:
- 学习多线程C++:添加线程不会使执行速度更快,即使它看起来应该
- 二叉搜索如何比线性搜索更快?
- push_back并插入 C++ STL 中哪个更快?
- 如何使插入排序更快?
- C++,为什么数组比矢量更快,使用更少的内存
- 哪个更快:在 1d 向量中按字符串搜索还是在 2d 向量中按向量搜索?
- 哪种方式更快?究竟发生了什么,我们没有看到什么?
- 使用 int32_t 而不是双精度运行矢量点积是否更快?
- 为什么一种算法在相同的时间复杂度下比另一种算法更快?
- C++模运算符与移位运算符,哪个更快,为什么?
- 遍历向量与数组哪个更快?
- 为什么按值传递QStringView比引用常量更快?
- 更快的C++算术运算
- 为什么C++可执行文件在与较新的libstdc++.so链接时运行得更快?
- 当我不关心顺序并且没有重复项时,更快的擦除删除成语?
- 如果要求比较器是严格的总排序,而不仅仅是严格的弱排序,C++标准算法会更快吗?
- SDL GPU 为什么将两个图像分成两个单独的循环更快?
- 有没有更快的方法可以在 std::vector 中插入元素
- 为什么酷睿i5-6600在非方阵乘法方面比酷睿i9-9960X更快?
- 为什么 NodeJS C/C++ 插件比纯 C 更快