arm memset的一些理解!!!

在c标准中,memset是一个字节一个字节的set buf。。但在arm机上,对齐4个字节的读写比一个字节的读写速度要快许多。。有时候为了速度。。只能改进memset按照4个字节刷buf。。

void memset16(sl_uint16 *dst, sl_uint16 val, int len)
{
#if 1//defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)
   register int l = (sl_uint32)dst & 3;
register int i, v;
register int *dst2;
register int val2 = val << 16 | val;


if (len < 4) 
{
*dst = val;
return;
}


if(l == 2)
{
*dst = val;
dst2 = (int*)(dst+1);
v = (len - l)%4;
len = (len - l)/4;
} else
{
dst2 = (int*)dst;
v = len % 4;
len = len/4;
}


for (i=0; i< len; i++)
*dst2++ = val2;


if (v != 0)
{
*(sl_uint16*)dst2 = val;
}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值