关于memset的实现

zhengr zhengr 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我需要一个32bit的memset,简单地可以
void memset(int *pMem, int value, int size)
{
while (size--)
{
*pMem++ = value;
}
}
但是这样看起来做的加法和比较次数太多,可以这样优化
{
switch (size & 7L)
{
case 1: *pMem++ = value;
case 2: *pMem++ = value;
case 3: *pMem++ = value;
case 4: *pMem++ = value;
case 5: *pMem++ = value;
case 6: *pMem++ = value;
case 7: *pMem++ = value;
}
size = (size >> 3);
while (size--)
{
pMem[0] = value;
pMem[1] = value;
pMem[2] = value;
pMem[3] = value;
pMem[4] = value;
pMem[5] = value;
pMem[6] = value;
pMem[7] = value;
pMem += 8;
}
}
我用vc6编译,禁止优化,后一种实现的确会快不少。
但是一旦打开速度优化,却是第一种实现快,而且和vc自带的
libc里面的memset速度接近
哪位兄台知道标准库里的memset是如何实现的?
难不成它也是用第一种土法,然后依赖编译器优化一下?
...全文
评论 10
收藏 已收藏
分享
返回顶部
zhengr
工具平台和程序库 24,850 成员 27,330 内容