0x200000 = the result is 20000000
0xDEADBEEF = the result is DEADBEEF
The last one worked for me (as expected, because it begins with a letter)
GoLink version 1.0.1.0 (Copyright 2002-2014)
Latest version.
And this is on a win32 platform, not 64. You can use 4096 stack reserve and commit as the absolute minimum, you don't need one full megabyte. If your program is recursing and the amount of recursive call is known you can adjust to find the perfect size, if it is unknown you have to give it a bigger stack than one would want to otherwise.
I'm not a very big fan of recursive calls, I use them rarely, quicksort for example. I'm more fan of replacing recursive calls with loops, it's a bit hard to do it sometimes but it can be done.
But on the other side of it, if your program utilizes 80% stack, 5% global, 10% heap, the end result is poisonous. You should keep everything on the stack because it keeps virtual addresses linearly, and it produces maximum cache efficiency. That's the good thing about the stack, it doesn't matter where you are, in what function, in what module, it is always in perfect "coordination" with the cache. If you have to have some globals, putting them at the start address of the stack is more wise than putting them in a global section. That usually requires that the base module starts within a function call so that it can set its variables up in that function, and also align the stack in the "root" function. When and if you need huge amount of memory later, using virtualalloc can adjust the base address for you, whatever base address you prefer (to prevent flushing out whatever you don't want to be flushed out). virtualalloc replaces globals in that way, and it's the fastest memory allocation api in windows so it's a good way to do it.