二维(一维)动态空间的开拓与释放

开发音视频工程项目时,在音频的传输方面我们需要开发一些存储的堆栈或者队列,下面先从一维开始说起,另外用到两个对开拓空间很有用的函数:alloca,malloc

1、在栈上开发空间(一维):

float *pcm = NULL;
pcm =  (float *)alloca(sizeof(float) * 1920 * 1);

参数是申请分配内存的字节数,返回值为分配到的内存地址。
它与malloc()函数的区别主要在于:

int main()
{
int *p = (int *)alloca(sizeof(int)*10);
free(p);//此时不能用free()去释放,会导致错误
return 0;
}

alloca主要的特征是,它是在栈上开辟的空间,当它作用域结束时会自动释放内存,不用像malloc那样,要用free动态释放空间。还有就是malloc开辟空间成功后,并未对内存空间初始化,必须调用memset来进行初始化,而alloca则初始化开辟的内存空间为0。
alloca性能上比malloc效率要高点。
需要用哪一个函数根据自己的倾向。

2、二维动态数组的建立:
C++版本:

int main(void)
{
	int n = 10;
	int m = 5;
	float **temp = new float*[n];
 
	for(int i = 0; i < n;i++)
	{
		temp[i] = new float[m];
	}
	for(int i = 0 ; i < n;i++)
	{
		for(int j = 0 ; j < m;j++)
		{
			temp[i][j] = i + j;
		}
	} 
	for(int i = 0; i < n;i++)     //执行二维动态数组的删除工作
	{
		delete [] temp[i];  		
	}
	delete [] temp;
    return 0;
}

C版本:

int main(void)
{
	int n = 10;
	int m = 5;
	float **temp = (float**)malloc(sizeof(float*)*n);
 
	for(int i = 0; i < n;i++)
	{
		temp[i] = (float*)malloc(sizeof(float)*m);
	} 
	for(int i = 0 ; i < n;i++)
	{
		for(int j = 0 ; j < m;j++)
		{
			temp[i][j] = i + j;
		}
	}
	for(int i = 0; i < n;i++)			//C使用free来释放空间的
	{
		free( temp[i]);
	}
	free( temp);
	return 0;
}

这时音频数据的读写就能游刃有余的放置了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值