gpt4 book ai didi

javascript - 为什么这个 JavaScript 程序比 C++ 更快地填充一个大数组?

转载 作者:太空狗 更新时间:2023-10-29 21:22:41 27 4
gpt4 key购买 nike

关于编译为 JavaScript 的语言的开发,我也在考虑以 C++ 为目标,以便在需要时生成更快的程序。我的计划是使用 std::vectors 来保存我的语言的动态数组。重复填充一个大数组将是一个正常的操作(双缓冲),所以我已经测试过:

#include <iostream>
#include <vector>
std::vector<int> gen(int w,int h){
std::vector<int> a;
a.resize(w*h);
for (int i=0; i<w*h; ++i)
a[i]=i;
return a;
};
int main(){
for (int i=0; i<100; ++i)
std::vector<int> a = gen(1000,1000);
};

奇怪的是,这个程序并不比等效的 JavaScript 程序快:

gen = function(w,h){
var a = new Float32Array(w*h);
for (var i=0; i<w*h; ++i)
a[i]=i;
return a;
};
for (var i=0; i<100; ++i)
gen(1000,1000);

令人惊讶的是,JS 版本的运行速度快了 3 倍。

clang++ my_program.cpp -o my_program
time ./my_program
real 0m1.393s
user 0m1.379s
sys 0m0.005s

time node my_program.js
real 0m0.458s
user 0m0.320s
sys 0m0.132s

为什么会这样?我应该重新考虑吗?

最佳答案

试试这个版本

void gen(int w,int h,std::vector<int>& a){
a.resize(w*h);
for (int i=0; i<w*h; ++i)
a[i]=i;
}

int main(){
for (int i=0; i<100; ++i) {
std::vector<int> a;
gen(1000,1000,a);
}
};

您的版本的问题是它在返回值时复制 vector 。因此它不直接等同于 JS 版本。

关于javascript - 为什么这个 JavaScript 程序比 C++ 更快地填充一个大数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20030483/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com