Unionları kavramaya karar verdim ve çok önceden de pop pushlar ile uğraşıyordum ve bu işlemi slice yerine dizi.length-- yaparak daha hızlı yapacağımı düşünmüştüm ama yanılmıştım. Her nedense length işlevi daha yavaştı. (Saçma gelmişti)
Şimdi ise unionlar ile dizinin uzunluğunu aldım ve direk o uzunluğu değiştirdim. Sonuç slice dan daha hızlı çıktı. Şimdi benim bir sorum var dizi.length işlevi ile aşağıdaki length arasında ne fark var? dizi.length'in başka farklı görevleri mi var? (Belki de kontrollerden dolayıdır -1 e düşmemesi için)
module main;
import std.stdio;
import std.datetime;
import core.memory;
int main(string[] argv){
union zx{
int[] dizi;
int length;
}
int[] l;
for(int i; i<1_000_000;i++) l~=i;
auto bx = zx(l);
long a1, a2;
a1 = Clock.currAppTick().usecs();
for(int i; i<1_000_000;i++) bx.length--;
a2 = Clock.currAppTick().usecs();
writeln(a2-a1);
a1 = Clock.currAppTick().usecs();
for(int i; i<1_000_000;i++) l.length--;
a2 = Clock.currAppTick().usecs();
writeln(a2-a1);
a1 = Clock.currAppTick().usecs();
for(int i; i<1_000_000;i++) l = l[0..$-1];
a2 = Clock.currAppTick().usecs();
writeln(a2-a1);
while(1){
}
return 0;
}
Zekeriya
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]