简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!
优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
1.前言
本篇目的:理解在栈和堆上申请内存的方式。
2.应用实例
<1>.在栈上申请内存
Linux在栈上申请内存最大是8M
如下所示,所在在栈上申请内存是有限制的
# ulimit -s
8192
int width = 1080;
int height = 1920;
int size = width * height * 3/2;
char buf[1024] = {0};//正确
//从文件中读size大小字节的数据
fread(data, 1, size, fp);
而1080 x 1920也超过8M
char buf[size] = {0};//报错
那么在栈可以不可以申请超过8M的内存呢?可以借助于C++容器:std::vector
<2>.std::vector
如果要使用栈上分配内存,但是大小又不是编译时确定的常量,可以考虑使用
std::vector
,它会自动管理内存的分配和释放。
int width = 1080;
int height = 1920;
int size = width * height * 3/2;
std::vector<unsigned char> data(size);//ok
int num = fread(data.data(), 1, size, fp);
<3>.在堆上分配内存
int width = 1080;
int height = 1920;
int size = width * height * 3/2;
unsigned char *data = new unsigned char[size];
int num = fread(data, 1, size, fp);
//需要手动释放内存
delete[] data;