与Windows相比,Linux上的代码速度较慢
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了与Windows相比,Linux上的代码速度较慢,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1668字,纯文字阅读大概需要3分钟。
内容图文
在修改我的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相比,Linux上的代码速度较慢全部内容,希望文章能够帮你解决与Windows相比,Linux上的代码速度较慢所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。