從彙編指令來看的話,calloc的指令是malloc+memset的一半左右。
時間上來說,calloc節省時間
用oProfile測試,重複10000000次,使用CPU cycle爲(不用看絕對,相對比較就好)
16.3547 : c=calloc(100,i);
8.0788+18.6207 : m=malloc(100*i); + memset(m,0,100*i);
因此,實際中,應該根據自己的需求和性能要求來選擇。不需要memset的地方就不用多此一舉。
下面是彙編代碼
m=malloc(100*i);
0x0000000000400563 <+15>: mov -0x14(%rbp),%eax
0x0000000000400566 <+18>: imul $0x64,%eax,%eax
0x0000000000400569 <+21>: cltq
0x000000000040056b <+23>: mov %rax,%rdi
0x000000000040056e <+26>: callq 0x400440 <malloc@plt>
0x0000000000400573 <+31>: mov %rax,-0x10(%rbp)
memset(m,0,100*i);
0x0000000000400577 <+35>: mov -0x14(%rbp),%eax
0x000000000040057a <+38>: imul $0x64,%eax,%eax
0x000000000040057d <+41>: movslq %eax,%rdx
0x0000000000400580 <+44>: mov -0x10(%rbp),%rax
0x0000000000400584 <+48>: mov $0x0,%esi
0x0000000000400589 <+53>: mov %rax,%rdi
0x000000000040058c <+56>: callq 0x400430 <memset@plt>
c=calloc(100,i);
0x0000000000400591 <+61>: mov -0x14(%rbp),%eax
0x0000000000400594 <+64>: cltq
0x0000000000400596 <+66>: mov %rax,%rsi
0x0000000000400599 <+69>: mov $0x64,%edi
0x000000000040059e <+74>: callq 0x400460 <calloc@plt>
0x00000000004005a3 <+79>: mov %rax,-0x8(%rbp)
0x00000000004005a7 <+83>: leaveq
0x00000000004005a8 <+84>: retq