Every time deviceOS is updated, it uses more RAM (in general). It’s the cost of extra features. If you don’t need the features or specific stability features and are RAM constrained, you may want to avoid upgrading. I’ve stayed at v0.6.4/v0.6.3 for that and general stability reasons.
Try compiling using the particle workbench’s Local Compile tools, grab the *.elf file from the “target/” directory, and upload it to this elf file analyzer to see what is using your statically / globally declared RAM.
For dynamically used RAM, identify all heap memory usage (malloc, new operator, some Strings) and do some worst case calculations. All other dynamic memory usage should usually be inside of your stack which is pre-allocated as far as the free memory calculations are concerned (IIRC, might be wrong), so as long as you aren’t getting Stack Overflow issues that shouldn’t be doing anything bad to you.
And of course follow all of those general guidelines above.
You say you are running out of “free memory”, but you are also mentioning the limitations of the stack. Which one of those is actually your problem? What specific errors or reset codes do you get? 38KB of memory is plenty of free memory for anything I can imagine in normal usage. If you have that much free memory but are running out of stack, just move some variables to the global / static space, or use the heap.