对于堆上内存分配函数,大家都比较熟悉。对于C而言,有calloc、malloc、realloc函数;对于C++而言,有new、new[]。
之前一直以为alloca函数也是堆上分配内存的函数,因为它和calloc及malloc太像了。并且,在STL源码及其他内存分配器中,都是用Alloc表示堆上内存分配,于是就习惯性的认为alloca函数也是堆上分配内存的函数。
今天,问一个同事有没有栈上分配内存的函数,他告诉我说要,是alloca函数。我一直不相信,因为我记忆中alloca是堆上分配内存的函数。
不查不知道,一查吓一跳,原来alloca函数真的是栈上分配内存的函数。只不过我们平时都不关注栈上内存分配,直接让编译器产生。
alloc原型为:
NAME
alloca -- memory allocator
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <stdlib.h>
void *
alloca(size_t size);
DESCRIPTION
The alloca() function allocates size bytes of space in the stack frame of
the caller. This temporary space is automatically freed on return.
RETURN VALUES
The alloca() function returns a pointer to the beginning of the allocated
space.
alloca函数分配的内存不需要手动释放&