以性能方式模仿JavaScript中的结构处理C数组

时间:2013-11-18 10:33:18

标签: javascript arrays struct

在C中,可以获得大量混合类型处理的数据记录非常有效。例如,将记录计算为另一个记录的函数,如:

struct TypeA{
    int i;
    boolean b;
}

struct TypeA{
    long int l;
    float f;
}

struct TypeA as[1000];
struct TypeB bs[1000];

for(int i=0; i<1000; i++)
    bs[i]=someFunction(as[i]);

as将被读取为lineary并且bs同样被写入,因此很容易利用CPU的内存或处理瓶颈而没有太多开销。

在JavaScript中,顺序创建的JS对象可能(但不太可能?)将生成优化的代码。 另一方面,数据可以拆分为更多使用类型的数组,如Float32Array等,而且someFunction必须读取和写入两个以上的数组,导致一些更多顺序内存访问流。

还有另一种做这种效果的风格吗?

1 个答案:

答案 0 :(得分:0)

在Javascript中,我写了这样的C代码:

var as =new Array(1000),
    bs =new Array(1000);

/* struct TypeA */
var TypeA = function(x,y) {
    this.i = x;
    this.b = y;
   return this;
}

var TypeB = function(x,y) {
    this.l = x;
    this.f = y;
}

var someFunction = function(a,b) {
   // doing something ....
   b.l = a.i*2;
   b.f = a.b?0.0:100.0;
}

/** init array first**/
for(var i=0; i<1000; i++) {
    as[i] = new TypeA(i+1, i & 1);
    bs[i] = new TypeB(0,0.0);
}


for(var i=0; i<1000; i++)
    someFunction(as[i],bs[i]);

我认为我写的效率更高。