Stack Space & Ackermann

Era Scarecrow via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jan 4 20:50:19 PST 2017


  Well re-watched a video regarding the Ackermann function which 
is a heavily recursive code which may or may not ever give a 
result in our lifetimes. However relying on the power of memoize 
I quickly find that when the program dies (from 5 minutes or so) 
nearly instantly (and only using 9Mb of memory).

long ack(long m, long n) {
     long ans;

     if (m == 0) ans = n + 1;
     else if (n==0) ans = ack(m-1, 1);
//    else ans = ack(m-1, ack(m, n-1)); // original
     else ans = memoize!ack(m-1, memoize!ack(m, n-1));

     return ans;
}

  This is only due to the limited stackframe space. Doing a search 
I find that the amount of stack space is decided on when the EXE 
is being compiled and in the EXE header but I'm not sure which 
one needs to be update (supposedly it's either 250k or 1Mb is the 
default), although neither help in this case, nor do the other 
binary tools as they don't recognize the binary format of D's exe 
output files)

  Alternatively if there's a way to tell the compiler a hint 
(either in D or in the compiling/linking flags) or the specific 
offset of which 32bit entry is the stack reserved space, I could 
continue my little unimportant side experiments.

  Suggestions? Comments?


More information about the Digitalmars-d-learn mailing list