[vox-tech] dyanamic memory panacea

Jeff Newmiller vox-tech@lists.lugod.org
Tue, 16 Jul 2002 14:01:38 -0700 (PDT)


On Tue, 16 Jul 2002, Peter Jay Salzman wrote:

> ok, not a panacea, but pretty cool nevertheless...
> 
> i was doing some reading and found a function alloca() which allocates
> dynamic memory like malloc() and friends, but it gets memory from the
> current stack frame instead of the heap.
> 
> the obvious advantage is that the memory is deallocated once the stack
> frame is popped.  in other words, when the function returns, all memory
> allocated by alloca is freed.  this means no memory leaks.  very cool.
> 
> however, in the man page, under BUGS, it says:
> 
> BUGS
>        The alloca function is machine dependent.
> 
> this doesn't say anything to me.  what does it mean for a function to be
> machine dependent?   does it behave differently across different
> machine architectures?  does code compiled on one x86 machine not run on
> another x86 machine?
> 
> what exactly is the man page warning me about?

Stack implementation in general is dependent on the hardware.  Some stacks
go from low memory to high memory. There are sometimes limited facilities
for manipulating stack pointers, so assembly language tricks of varying
levels of sophistication are always needed to implement alloca. (Similar
tricks are required for setjmp/longjmp.) Some stacks have limited ability
to expand... and this is probably the most critical hardware-specific
concern.

The warning is simply that there is no portability guarantee for this
function, and no guarantee that it can even be implemented on all
architectures, current or future.  I think it would be difficult for the
x86 architecture to evolve in a direction that would make implementing it
impossible, though, and I can't think of any hardware that a Un*x-ish OS
would run on that couldn't implement this function. 

Personally, I doubt I would find much use for it, though.  I am
uncomfortable allocating an input-determined amount of memory on the
stack.

---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnewmil@dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...2k
---------------------------------------------------------------------------