memset效率问题

char buff[10]

初始化一个字符数组,只需要buff[0] = '\0'即可,没有必要用memset,在使用该buff时,需要注意末尾加'\0',这样性能比较好。


[cpp]  view plain  copy
  1. #include <iostream>  
  2. #include "sys/time.h"  
  3.   
  4. void use_memset()  
  5. {  
  6.     timeval timestart,timeend;  
  7.     gettimeofday(×tart, NULL);  
  8.   
  9.     forint i = 0; i < 512; i ++)  
  10.     {  
  11.         char* buff = new char[1024*1024];  
  12.         memset(buff,0,1024*1024);  
  13.         delete[] buff;  
  14.     }  
  15.   
  16.     gettimeofday(&timeend, NULL);  
  17.     double linStart = 0,linEnd = 0;  
  18.     linStart = ((double)timestart.tv_sec * 1000000 + (double)timestart.tv_usec);    //unit S  
  19.     linEnd = ((double)timeend.tv_sec * 1000000 + (double)timeend.tv_usec);       //unit S  
  20.     double time = linEnd-linStart;  
  21.     printf("%f/n",time);  
  22. }  
  23.   
  24. void use_setlast()  
  25. {  
  26.     timeval timestart,timeend;  
  27.     gettimeofday(×tart, NULL);  
  28.   
  29.     forint i = 0; i < 512; i ++)  
  30.     {  
  31.         char* buff = new char[1024*1024];  
  32.         buff[1024*1024-1] = '/0';  
  33.         delete[] buff;  
  34.     }  
  35.   
  36.     gettimeofday(&timeend, NULL);  
  37.     double linStart = 0,linEnd = 0;  
  38.     linStart = ((double)timestart.tv_sec * 1000000 + (double)timestart.tv_usec);    //unit S  
  39.     linEnd = ((double)timeend.tv_sec * 1000000 + (double)timeend.tv_usec);       //unit S  
  40.     double time = linEnd-linStart;  
  41.     printf("%f/n",time);  
  42. }  
  43.   
  44. int main(int argc, char** argv)  
  45. {  
  46.     use_memset();  
  47.     use_setlast();  
  48. }  


运行结果:
502575.000000
5342.000000
相差100倍。因此,能确定长度或者大概长度的情况下,请不要memset所有字符。

你可能感兴趣的:(memset效率问题)