C语言memset和memcpy的好处

如果要进行大量数据的写,单个变量进行写的方式,将拖慢行能
而memset和memcpy的好处,可以大量的,通过指针方式的写入

{
	HI_U8*  pVirAddr = (HI_U8*) HI_MPI_SYS_Mmap(outFrame[i].stFrame.stVFrame.u64PhyAddr[0]+ u32MainYSize, u32MainYSize  );
	if (pVirAddr != HI_NULL)
	{		
					memset( pVirAddr, 0x80,  u32MainYSize / 2);
					SX_S32 s32Ret = HI_MPI_SYS_Munmap((HI_VOID*)pVirAddr, u32MainYSize / 2);
					if(HI_SUCCESS != s32Ret)
					{
						printf("@@@@@@@@      1     pVirAddr unmap fail   @@@@@@@@@@\r\n");				
					}
	}
	pVirAddr = HI_NULL;
	}

比如要复制,写入大量视频数据,只需传入首地址,可以使用memset完成数据的写入,
如下面的这段代码,for循环方式写入,将严重拖慢性能,在高速数据访问的系统上,这将是致命的,所以c语言的好处,可以通过指针的 方式,大量完成快速访问。

for (i = 0, u = 0; i <600; i++, u++)
{	
	for (j = 0, v = 0; j <800; j++, v++)
	{											
		*(pVirAddr2 + u * dstframe->u32Stride[0] + v ) = *(pVirAddr1 + u * srcframe->u32Stride[0] + v );
		//*(pVirAddr2 + u * dstframe->u32Stride[0] + v ) = 255;	
	}
}

for循环本身相当于延时函数,重复性的代码,将是致命的
下面是使用memcpy的方式,来完成一帧数据的复制,写入。将从一个buf,大量拷贝数据

for( int i = 0; i < pVBuf->u32Height; i++ )
{
           memcpy( (SX_U8 *)buf + i*pVBuf->u32Width,  pVBufVirt_Y + i*pVBuf->u32Stride[0], pVBuf->u32Width);
}

应该可以改进,去掉for循环
memcpy( (SX_U8 )buf + ipVBuf->u32Width, pVBufVirt_Y , pVBuf->u32Width * pVBuf->u32Height);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值