栈vs堆
背景
在需要一块内存来做编解码时,有以下方式来申请内存:
- 栈:优点:性能好,不需要全局分配器去查找,不会产生内存碎片;缺点:大小有限,我本机栈大小限制是8192 Kbytes
- 堆:优点:能分配比栈大得多的区域;缺点:性能不如栈。比如栈上的vector,优势是可以自动释放,数据是从堆上分配。
需求
如果根据需要的大小,自动从栈或堆上分配,就能综合两种分配策略,各取优点。
实现
- 有点复杂,主要是根据条件分配栈变量,按照C/C++标准,是做不到的。
- 考虑用到编译器扩展,例如VLA(变长数组),下层是和alloca(gcc分配栈变量)类似思路。
- alloca分配栈空间,不是超出scope就释放,而是超出函数范围释放,包括函数返回或者跳出函数。
写了个demo:
https://github.com/chuqingq/code_c/blob/master/c++/20200328_stack_heap_dyn/dyn.cpp
以上是 栈vs堆 的全部内容, 来源链接: utcz.com/z/514849.html