首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于memcpy,memset解决思路

2012-03-15 
关于memcpy,memsetBYTEpData[5]{0}memset(pData,0,5*sizeof(BYTE))for(inti0i5i++){pData[i]0}这

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

热点排行