Void pointers

Alex via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon May 16 23:55:35 PDT 2016


On Monday, 16 May 2016 at 23:01:44 UTC, ag0aep6g wrote:
> On 05/17/2016 12:53 AM, Alex wrote:
>> Just as the reality (in my head) is: you can count something 
>> without
>> having written the natural numbers before you start to count...
>
> iota does that, too. A iota struct doesn't store all the 
> numbers it will emit. Just like a slice, a iota struct stores 
> two numbers: the first and the amount of numbers. Iterating 
> over it means counting, not reading pre-generated numbers from 
> a list.
>
>> Especially, I don't have to create some strange structs 
>> containing just
>> a number, as I expect to have some millions of them.
>
> Some million slices will take just as much space as some 
> million iota structs. Storing a slice isn't free. If you create 
> the slices on the fly, you can do that with iota too. No need 
> to store them beforehand.

the space is the same, yes...
Added this to my test:

import std.conv : to;
import std.datetime;
size_t aM = 5; size_t bM = 80;
void f1() {auto io = iota(aM,bM);}
void f2() {auto sl = testFunc(arr, aM ,bM);}
auto r = benchmark!(f1, f2)(100_000);
auto f0Result = to!Duration(r[0]); // time f1 took to run 10,000 
times
auto f1Result = to!Duration(r[1]); // time f2 took to run 10,000 
times
writeln("f1: ", f0Result);
writeln("f2: ", f1Result);

with dmd test44.d -release
the results are:
f1: 692 μs and 7 hnsecs
f2: 379 μs and 1 hnsec


More information about the Digitalmars-d-learn mailing list