![]() |
![]() HP OpenVMS Systemsask the wizard |
![]() |
The Question is: A philosophical question. Malloc() allocates memory on the heap. But there is as far as I know no equivalent function to allocate memory on the stack as for example for array abc in func() char abc[SIZE]; ... when SIZE is not known until run-time. Why not? The advantage would be automatic deallocation upon function return thereby eliminating the need to manually deallocate and the risk of forgetting to free the memory. Thank you very much. The Answer is : You will want to direct your question to the C standards body, as there is no C standards compliant mechanism for this. C++ attempts to address some of the omissions in the C model, and particularly in this case with the C++ concepts of constructors and destructors and such. Some C compiler implementations do provide an alloca() mechanism, Compaq C has the __ALLOCA built-in function and the asm directive (direct manipulation of the stack pointer) for those programmers wishing to create platform-specific coding. As is the case with stack-based memory allocations such as function-local variables, you must exercise care with alloca-based memory allocations. Should references to the stack-based memory area "outlive" the validity of the stack frame itself, various corruptions can ensue. C memory management itself is inherently rather generic in nature, and thus can be ill-suited for certain applications. (The RTL VM services underlying the C malloc() and free() calls do attempt to learn the application memory access patterns.) If you wish to manage your own memory, you can also use VM zones for this purpose, and take full control over the lookaside list sizes and other attributes. Further, you can designate (within your application) one VM zone as a temporary memory zone, and flush the entire zone when, for instance, the program is ready to prompt for a new user command; when all temporary memory utilized by the last command processed can be safely freed. Also please see topic (6811).
|