在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
必须读取和写入两个以上的数组,导致一些更多顺序内存访问流。
还有另一种做这种效果的风格吗?
答案 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]);
我认为我写的效率更高。