Stack Space & Ackermann
rikki cattermole via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Jan 4 22:20:28 PST 2017
On 05/01/2017 7:03 PM, Era Scarecrow wrote:
> On Thursday, 5 January 2017 at 04:53:23 UTC, rikki cattermole wrote:
>> Well, you could create a fiber[0].
>>
>> Fibers allow you to set the stack size at runtime.
>>
>> [0] http://dlang.org/phobos/core_thread.html#.Fiber.this
>
> Well that certainly does seem to do the trick. Unfortunately I didn't
> get the next output because I ran out of memory to allocate/reallocate
> over 2Gb :P
>
> I suppose with a 64bit compiling the program might run a bit longer and
> succeed further (with 24Gigs of ram), however the sheer amount of memory
> required will make this little exercise more or less a waste of time.
>
> Still that was an interesting way around the (stackframe) problem, one
> I'll keep I mind (should i need it again).
>
> void m() {
> foreach(i; iota(6))
> foreach(j; iota(6)) {
> writefln("Ackerman (%d,%d) is : %d", i,j,ack(i,j));
> }
> }
>
> int main(string[] args) {
> Fiber composed = new Fiber(&m, 2<<28); //512MB
> composed.call();
>
> return 0;
> }
>
> results:
>
> Ackerman (3,5) is : 253
> Ackerman (4,0) is : 13
> Ackerman (4,1) is : 65533
>
> core.exception.OutOfMemoryError at src\core\exception.d(693): Memory
> allocation failed
>
You're using more memory then need to:
foreach(i; 0 .. 6)
No need for iota.
More information about the Digitalmars-d-learn
mailing list