calloc=malloc+memset?

功能上calloc=malloc+memset;
從彙編指令來看的話,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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章