关于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的情况下,两种写法会优化成相同的代码~