一直认为对数组赋初值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;
......