栈vs堆

编程

背景

在需要一块内存来做编解码时,有以下方式来申请内存:

  1. 栈:优点:性能好,不需要全局分配器去查找,不会产生内存碎片;缺点:大小有限,我本机栈大小限制是8192 Kbytes
  2. 堆:优点:能分配比栈大得多的区域;缺点:性能不如栈。比如栈上的vector,优势是可以自动释放,数据是从堆上分配。

需求

如果根据需要的大小,自动从栈或堆上分配,就能综合两种分配策略,各取优点。

实现

  1. 有点复杂,主要是根据条件分配栈变量,按照C/C++标准,是做不到的。
  2. 考虑用到编译器扩展,例如VLA(变长数组),下层是和alloca(gcc分配栈变量)类似思路。
  3. alloca分配栈空间,不是超出scope就释放,而是超出函数范围释放,包括函数返回或者跳出函数。

写了个demo:

https://github.com/chuqingq/code_c/blob/master/c++/20200328_stack_heap_dyn/dyn.cpp

以上是 栈vs堆 的全部内容, 来源链接: utcz.com/z/514849.html

回到顶部