我写了一个函数,Str::Compare
基本上是strcmp
用另一种方式重写的.在比较这两个函数时,在循环中重复500'000'000次,strcmp
执行速度太快,大约快x750倍.
此代码在C库中编译,-Os
参数为active:
int Str::Compare(char* String_1, char* String_2)
{
char TempChar_1, TempChar_2;
do
{
TempChar_1 = *String_1++;
TempChar_2 = *String_2++;
} while(TempChar_1 && TempChar_1 == TempChar_2);
return TempChar_1 - TempChar_2;
}
Run Code Online (Sandbox Code Playgroud)
该函数的执行时间3.058s
,而strcmp
只0.004s
.
为什么会这样?
这也是我实现基准测试循环的方式:
int main()
{
char Xx[] = {"huehuehuehuehuehuehuehuehuehuehuehuehuehue"},
Yy[] = {"huehuehuehuehuehuehuehuehuehuehuehuehuehue"};
for(int i = 0; i < 500000000; ++i)
Str::Compare(Xx, Yy);
}
Run Code Online (Sandbox Code Playgroud)
编辑:测试我编写的一些代码和优化,提高了Str::Compare
速度.如果之前strcmp
是x750倍,现在只有x250.这是新代码: …
我用C编写了这段代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int main()
{
char string1[20];
char string2[20];
strcpy(string1, "Heloooo");
strcpy(string2, "Helloo");
printf("%d", strcmp(string1, string2));
return(0);
}
Run Code Online (Sandbox Code Playgroud)
控制台打印值是1还是字符和字符ASCII
值之间的差值,即111?在这个网站上写道,这应该给出111,但当我在我的笔记本电脑上运行时,它显示1.为什么?o
\0