栈上分配内存函数Alloca

Alloca函数常被误认为是堆上内存分配,实际上它是在栈上分配内存。不同于calloc和malloc,alloca分配的内存无需手动释放,超出作用域即回收。然而,由于栈空间限制和潜在的安全问题,alloca不推荐用于大容量数据结构的分配,可能导致栈溢出和其他内存破坏。最佳实践是遵循编译器默认的栈内存管理。
摘要由CSDN通过智能技术生成

对于堆上内存分配函数,大家都比较熟悉。对于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函数分配的内存不需要手动释放&

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值