int64_t t(int64_t a) {
return a + 2;
}int64_t i, j;
for (i = 0; i < 3000000000; i++) {
j = t(i);
}
printf("%I64d", j);
= 6 сек
--------------------------------------------------
function t(a) {
return a + 2;
}
for (var i = 0; i < 3000000000; i++) {
var j = t(i);
}
console.log(j);
= 9 сек
тут есть момент, до 3G итераций нода выигрывает в 1.5 раза, после - резко ступенькой начинает проигрывать в 2, далее с увеличением кол-ва итераций разрыв не растет.
Сравнимого примера работы с объектами родить не смог, статические объекты сей рвут js'ную динамику как тузик грелку! десятки раз, теоретически тут надо сравнивать с <map>, но практически это наверное в пользу бедных, объекты используются часто, и если их много то общий слив может быть весьма приличным.
Далее тест на GC и память:
int64_t i, j;
vector<int> *p[100000];
for (i = 0; i < 100000; i++) {
p[i] = new vector<int>;
for (j = 0; j < 50000; j++) {
p[i]->push_back(j);
}
if (i > 2000) { delete p[i - 2000]; }
}
30 сек 480Мб
--------------------------------------------------
var s = [];
for (var i = 0; i < 100000; i++) {
s[i] = new Int32Array(50000);
for (var j = 0; j < 50000; j++) {
s[i][j] = j;
}
if (i > 2000) { s[i - 2000] = null; }
}
22 сек 530Мб
в диспетчере по динамике памяти видно что GC работает, объем памяти достаточно быстро стабилизируется, правда у ноды его колбасит на протяжении всего процесса +/- 100Мб, что в общем то понятно, кроме того есть милая фишка - если у ноды закомментить последнюю строчку с очисткой то она насмерть вешает винду, в дрова, только аппаратный сброс)