![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: I recently posted a question asking why a function to dynamically allocate memory on the stack does not exist in OpenVMS. I have since learned that such a function exist in Linux (and therefore likely also in Unix). It's name is alloca(). Why was this fun ction excluded when calloc(), malloc() and realloc() were ported? Thank you very much. The Answer is : The alloca() call is a compiler extension, and is not part of the ANSI C standards. The calloc(), malloc() and realloc() calls are native code, using the OpenVMS Run-time library. These calls are not ports. The alloca() call is a compiler-generated run-time routine, and not a subroutine call, and not a run-time library routine. A subroutine call cannot alter the stack pointer of a caller. Modifications made to the stack or to the stack pointer from within the context of the subroutine itself are automatically removed -- which is what you seek to have happen here -- when the subroutine exits. This means that the alloca() call cannot exist and operate as a standard subroutine. Various extensions to C standards available within the Compaq C compiler -- including a call to allocate stack storage -- are documented in the C documentation set. In this particular case, please see the Compaq C User documentation available at the Compaq website. (Pointers to the Compaq language compiler documentation are included in the OpenVMS FAQ.) Also see topic (6809).
|