C两个函数之间的时差

时间:2014-10-17 11:23:12

标签: c performance

我有两个比较两个字符串的简单代码函数。

策略是将短字符串与长字符串顺序比较。

例如,

string1 = "ABCDABCDEFGAHAD",
string2 = "ABCD"

然后通过滑动string1来比较string2string2,直到string2的结束到达string1结尾< / p>

以下是我使用的功能 第一个是

void compare1(char* src , char* target , int src_size , int target_size , int* score){
   int i , j;
   for ( i = 0 ; i < src_size - target_size ; i++){
         for(j=0; j < target_size ; j++){
               if(src[i+j] == target[j]){
                    score[i]++;
               }else{
                     continue;
               }
         }
   }
}

,第二个是

void compare2(char* src , char* target , int src_size , int target_size , int* score){
       int i , j;
       char* dest = (char*)malloc(sizeof(char)*(target_size));
       for( i = 0 ; i < src_size - target_size ; i++){
            strncpy(dest,src,target_size);
            for( j = 0 ; j < src_size ; j++){
                if(dest[j] == target[j]){
                    score[i]++;
                }else{
                    continue;
                }
            }
        }
        free(dest);
    }

这两个给了我不同的时间,这是

8393.00 ms from compare1 
4415.00 ms from compare2

是什么让这个时间差异?

两个字符串的长度是1024 * 1024 * 10和128相对于src和目标函数变量。

1 个答案:

答案 0 :(得分:3)

你的第二个功能是错误的。它应该从src + i复制而不是从src复制。此外,嵌套循环应该针对target_size的{​​{1}}元素完成,而不是代码中的dest元素。这导致:

src_size

备注1:void compare2(char* src , char* target , int src_size , int target_size , int* score){ int i , j; char* dest = (char*)malloc(sizeof(char)*(target_size)); for( i = 0 ; i < src_size - target_size ; i++){ strncpy(dest,src + i,target_size); for( j = 0 ; j < target_size ; j++){ if(dest[j] == target[j]){ score[i]++; }else{ continue; } } } free(dest); } 没用! 备注2:您可以使用else continue;复制字符串(因为您知道长度并且不使用终端字符memcpy)。