与Windows相比,Linux上的代码速度较慢
发布时间:2020-12-14 05:40:46 所属栏目:Windows 来源:网络整理
导读:在修改我的C代码(最初是为 Windows编写并在VS 2008下编译)后,我在 Linux上运行它.令我惊讶的是,它现在至少比Windows版本慢10倍. 使用Profiler工具我发现以下函数占用了应用程序花费的大部分时间: /* advance by n bits */void Flush_Buffer(N)int N;{ int I
在修改我的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("%dn",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]++; ... (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在哪里可以找到有关Microsoft未来Windows版本中COM支持计划
- active-directory – 无法在新站点上将Windows Server 2012
- 什么时候* Window焦点*会在Android中发生变化?
- powershell下安装带@的npm包报错问题
- windows – 发生了系统错误1219
- windows – 批量请求用户输入(/ P)时换行?
- windows – WaitForSingleObject是否放弃了线程的时间片?
- WIX复杂条件
- 如何在Windows Server 2016中将打印机添加到Active Directo
- active-directory – 降级也运行Exchange 2010的DC
推荐文章
站长推荐
- windows-server-2008-r2 – 在环回地址上禁用IPv
- windows – LAN中托管交换机的DNS设置
- 如何在Windows中为当前用户的登录会话获取唯一ID
- windows-server-2003 – 停止WSUS重启服务器
- Batch unlock AD account using PowerShell
- windows-runtime – IOutputStream.FlushAsync的
- Windows更新 – Windows Server停留在检查更新
- windows – 使用批处理命令检查文件夹是否为空?
- 在R中创建一组同步的Windows 7 PC并行处理?
- VS2017中使用ReportViewer控件,vs2017找不到Mic
热点阅读