关于memset的实现
我需要一个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是如何实现的?
难不成它也是用第一种土法,然后依赖编译器优化一下?