读书人

关于memcpy,memset解决思路

发布时间: 2012-03-15 11:50:38 作者: rapoo

关于memcpy,memset
BYTE pData[5] = {0};
memset(pData, 0, 5 * sizeof(BYTE));

for(int i = 0; i < 5; i++)
{
pData[i] = 0;
}

这两种写法的效率一样么,memset和memcpy是不是也是一个一个赋值的呢

[解决办法]
用上面一种肯定更好,虽然我不能肯定上面一定效率高(肯定不会低),但是不管从代码简洁程度,代码美观度,实用性方面考虑,都是用标准c函数比较好一点。
[解决办法]
效率上来讲,库函数的实现要比自己循环赋值肯定是要高些。
不过我比较倾向于使用初始化用花括号赋值的方式进行数组清零。
[解决办法]
struct ss{
int a,b,c;
ss():a(0){}
};

ss sss[10]; //10个结构体的成员a将全是0.


[解决办法]
vc 的 memset

void * __cdecl memset (
void *dst,
int val,
size_t count
)
{
void *start = dst;

#if defined (_M_IA64) || defined (_M_AMD64)

{


__declspec(dllimport)


void RtlFillMemory( void *, size_t count, char );

RtlFillMemory( dst, count, (char)val );

}

#else /* defined (_M_IA64) || defined (_M_AMD64) */
while (count--) {
*(char *)dst = (char)val;
dst = (char *)dst + 1;
}
#endif /* defined (_M_IA64) || defined (_M_AMD64) */

return(start);
}


[解决办法]
release的情况下,两种写法会优化成相同的代码~

读书人网 >C++

热点推荐