测试memcpy有趣的问题
测试代码如下GetCounterTimerFromStart是用来计时的代码
string String = "600187.SZ";
char Chars[10] = "600187.SZ";
char test[7];
long long int start, end;
InitTimer();
int usercase = GetConterTimmer() % 100000000;
start = GetConterTimmerFromStart();
for(int i=0;i<100000000;i++)
{
memcpy(test, Chars + i%4, 6);
test[6] = '\0';
}
end = GetConterTimmerFromStart();
cerr << start << endl << end << endl <<end - start<< endl;
结果发现,速度很快,几百纳秒就运行完毕。与预期不相符。
查看汇编代码,发现,程序没有执行memcpy。
如上图所示,左图为该代码汇编结果,程序没有汇编语言。原因为后面没有使用test变量导致test被优化掉。
修改之后代码
string String = "600187.SZ";
char Chars[10] = "600187.SZ";
char test[7];
long long int start, end;
InitTimer();
int usercase = GetConterTimmer() % 100000000;
start = GetConterTimmerFromStart();
for(int i=0;i<100000000;i++)
{
memcpy(test, Chars + i%4, 6);
test[6] = '\0';
}
end = GetConterTimmerFromStart();
cerr << start << endl << end << endl <<end - start<< endl;
printf("%s\n", test);