一直认为对数组赋初值memset要比for语句要快,例如下两种方式:
int i= 0;
char cArry[10]={0};
方式一:
for(i=0;i<10;i++)
{
cArry[i]=0xff;
}
方式二:
memset(cArry,0xFF,sizeof(cArry));
今天经过查看memset的反汇编,发现原来memset也是翻译成了for循环语句来进行赋值操作的,所以这两种方式的赋值时间应该差不多。
源代码实现:
int main()
{
char cArry[10]={0};
memset(cArry,0xFF,10);
return 0;
}
memset的反汇编形式如下,这里只粘贴出 关键的几行:
memset proc
mov edx,[esp+0ch];
mov ecx ,[esp+4];
.......
xor eax,eax;
mov al,[esp+8];
push edi;
mov edi,ecx;
cmp edx,4;
jb tail;
.........
tail: /*该部分就是memset的赋值部分主代码实现就是一个for循环操作*/
mov [edi],al;
inc edi;
dec edx;
jnz tail;
......

本文探讨了memcpy函数与使用for循环对数组赋值的效率对比,通过反汇编形式揭示memcpy内部实现原理,表明两者在实际操作中性能相近。详细解析memcpy与for循环在内存操作上的区别与效率考量。
2万+

被折叠的 条评论
为什么被折叠?



