与Windows相比,Linux上的代码速度较慢

前端之家收集整理的这篇文章主要介绍了与Windows相比,Linux上的代码速度较慢前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
修改我的C代码(最初是为 Windows编写并在VS 2008下编译)后,我在 Linux上运行它.令我惊讶的是,它现在至少比Windows版本慢10倍.

使用Profiler工具我发现以下函数占用了应用程序花费的大部分时间:

/* advance by n bits */

void Flush_Buffer(N)
int N;
{
 int Incnt;


 ld->Bfr <<= N;

Incnt = ld->Incnt -= N;

if (Incnt <= 24)
{
if (System_Stream_Flag && (ld->Rdptr >= ld->Rdmax-4))
{
do
{
if (ld->Rdptr >= ld->Rdmax)
      Next_Packet();
    ld->Bfr |= Get_Byte() << (24 - Incnt);
    Incnt += 8;
  }
  while (Incnt <= 24);
}
else if (ld->Rdptr < ld->Rdbfr+2044)
{
  do
  {
    ld->Bfr |= *ld->Rdptr++ << (24 - Incnt);
    Incnt += 8;
  }
  while (Incnt <= 24);
}
else
{
  do
  {
    if (ld->Rdptr >= ld->Rdbfr+2048)
      Fill_Buffer();
    ld->Bfr |= *ld->Rdptr++ << (24 - Incnt);
    Incnt += 8;
  }
  while (Incnt <= 24);
}
ld->Incnt = Incnt;
}

}

这个功能在Windows上占用的时间可以忽略不计.在Linux上它需要接近14秒.我在这里犯了什么错?

此处没有系统调用,因此此代码段应独立于OS特定的调用,因此应在相同的时间运行.

(我的猜测:这个函数被多次调用,所以分析器也可能累​​积所有调用的时间.在这种情况下,我认为其中一个问题可能是函数没有快速获取其输入参数与Windows案例相比.)

我在这里犯了什么错?有什么猜测?

Rgrds,

H

解决方法

您可以尝试使用计数器注释代码中的所有代码路径.在程序结束时,每个计数器将包含有关代码路径执行次数的信息.在Windows版本和Linux版本之间逐行比较这些数字可能会发现该程序遵循不同的代码路径.根据代码路径的性质,差异可能能够解释为什么Linux版本比Windows版本慢.

int count[100];

// Call this function at the end of program 
void PrintCounts() {
    int i;
    for(i=0; i<100; i++) printf("%d\n",count[i]);
}

void Flush_Buffer(int N) {
  int Incnt;

  ld->Bfr <<= N;

  Incnt = ld->Incnt -= N;

  if (Incnt <= 24) {
    count[0]++;
    if (System_Stream_Flag && (ld->Rdptr >= ld->Rdmax-4)) {
      count[1]++;
      do {
         count[2]++;
         ...

猜你在找的Windows相关文章