Поторопился, разобрался, с объектами таки не все так плохо:class c {
public:
int64_t x;
c(int64_t v);
};
c::c(int64_t v) {
x = v;
}
c *p[10000001];
int64_t i, j;
j = 0;
for (i = 0; i < 100000000; i++) {
p[j] = new c(j);
p[j]->x++;
j++;
if (j > 10000000) j = 0;
if (i > 10000000) delete p[j];
}
11 сек 200Мб
--------------------------------------------------
o = [];
var j = 0;
for (var i = 0; i < 100000000; i++) {
o[j] = {
x: j
}
o[j].x++;
j++;
if (j > 10000000) j = 0;
if (i > 10000000) o[j] = null;
}
19 сек 700Мб (в процессе периодически колбасится от 400 до 900, - работает GC)
Данный вариант (без методов) наиболее употребим в JS т.к. в нем нет структур и они реализуются объектами, но без ложки дегтя всетаки не обошлось, если к JS объектам добавлять методы (функции) то они начинают существенно проигрывать, причем тем больше чем больше функций, при добавлении 1 - в 4 раза, 3 - в 7 раз и т.д. Это конечно печально, но и сравнивать тут в прямую нельзя, в плюсах методы статические, в JS же - динамические, их код может формироваться в ходе исполнения, как говорится 2 большие разницы.
Так что остаюсь при своем мнении что в общем JS проигрывает совсем не много (при соответствующем применении) но засады есть, где ж их нет, их надо знать, также надо не забывать что типизация в JS находится в зачаточном состоянии - может вылезти некоторый перерасход памяти. Производительность в большинстве тестов +/-1.5 раза, расход памяти от аналогичного до 3-5 раз больше, по моему все это весьма не плохо, тем более для динамического языка)