我对编程的世界比较陌生。我有几个性能方面的问题:
控制台应用程序是否比带图形用户界面的应用程序运行更快?
像C和Pascal这样的语言是否比面向对象的语言,如C++和Delphi更快?我知道语言速度更多取决于编译器而不是语言本身,但是过程式语言的编译器是否会生成比面向对象语言更快的代码(包括可以生成C代码的C++编译器)?
我对编程的世界比较陌生。我有几个性能方面的问题:
控制台应用程序是否比带图形用户界面的应用程序运行更快?
像C和Pascal这样的语言是否比面向对象的语言,如C++和Delphi更快?我知道语言速度更多取决于编译器而不是语言本身,但是过程式语言的编译器是否会生成比面向对象语言更快的代码(包括可以生成C代码的C++编译器)?
控制台应用程序比基于 Windows 的应用程序快吗?
简短回答:不是的
长篇回答:
在控制台应用程序中,没有GUI线程需要重新绘制窗口和接受用户输入,因此从这个意义上讲,控制台应用程序可能会稍微快一些(因为它少了一个线程抢占CPU周期)。但是,由于现代操作系统同时运行多个进程,因此控制台应用程序仍然会与系统中的其他进程竞争CPU,所以不会更快。
类似C和Pascal这样的语言是否比面向对象的语言如C++和Delphi更快?
简短回答:不是的
长篇回答:
在等效的程序中,C和C++的性能大致相同。尽管编程语言确实可以影响性能,但通常你需要关注的主要是算法(您的应用程序逻辑表达的内容)而不是算法所编写的语言。
正如已经提到的,你的代码通常在控制台应用程序中运行速度与在GUI应用程序中运行速度相同。
真正的区别在于开销。所有其他条件相等的情况下,GUI应用程序是更大的EXE文件,启动和关闭需要更多时间,并且会消耗更多资源。在应用程序运行时更新UI也是很好的形式,但这可能会从CPU密集任务中占用一些周期。
但在大多数情况下,这不应该有影响。
由同一编译器生成的相同代码无论是在GUI应用程序还是控制台中运行,都将以相同的速度运行。此外,编译为C++的C代码(假设它也符合C++标准)与编译为C的相同代码不会有显著差异,如果有的话。
然而,操作系统方面可能会影响性能,控制台应用程序除非被阻塞在操作系统或I/O调用上,否则将消耗其整个时间片;GUI应用程序通常是事件驱动的,因此等待事件处理它,然后等待下一个事件;虽然您可能有类似于控制台应用程序的工作线程。此外,GUI应用程序必须花费时间更新其更复杂的显示。但这些方面受应用程序设计者和操作系统控制,而不是编译器。
就面向对象编程而言,它本质上并不慢,但有些结构和架构可以导致更快的应用程序开发、更好的可维护性和鲁棒性,但这可能会牺牲一些性能。
不是的,甚至相反可能更快:
正如Dav在他的评论中所说,代码决定了你的应用程序有多快。这也适用于编译器的另一面,即生成的机器代码。
通常情况下,较新的编译器会产生更快的机器代码,因为它们利用了先进的CPU功能,并执行现代编译器优化,这些优化在早期的编译器中找不到。
例如,可以创建一个Pascal应用程序,如果使用Delphi编译而不是旧的Turbo Pascal编译器,则运行速度更快。
简而言之:不要仅仅因为它们看起来更轻巧就使用旧的/原始的编译器。在大多数情况下,您不会获得任何性能提升。
time starttime = now;
for (i = 0; i < 1000000; i++){
cout << i;
}
cout << (now - starttime);
并询问是否这次循环开销,隐含地假设由于<<
只有两个字符,因此可以忽略不计。实际上,循环内部的<<
比循环本身需要更多的周期。根据我的经验,几乎所有程序员都会以各种方式这样做,包括我自己,他们感激用如此少的代码就能完成如此多的工作,所以他们经常这样做,并且认为如果他们这样做了,那么就是必要的。
因此,语言的级别越高,性能调优的技能就越重要。
这仅适用于您的第一个问题:
当控制台应用程序在图形环境中交互运行(例如GNOME桌面或Windows上),它们会在终端窗口中运行,该窗口实际上是一个GUI应用程序。因此,任何GUI成本(例如必须运行消息循环,不必分配GUI小部件等)都只是转移到托管环境。全屏运行控制台应用程序(text mode屏幕)确实减少了CPU和视频卡之间的通信,但任何速度提升都将是微不足道的。
然而,相比图形输出,控制台UI更容易开发,代价是灵活性较差。只需比较使用ncurses创建表单所需的工作量与使用GTK所需的工作量即可。
感谢各位帮我解决了这个问题, 但我还是感到困惑。我的印象是,面向对象的语言性能开销比较大,因为它们的库过于庞大。如果你使用 Blitz++ 库在 C++ 中编写程序,它将比 C 运行得更快,或者与 C 相同,但是普通的 C++ 库使得 C++ 比 C 更慢。同样适用于 Pascal 和 Delphi,如果您使用 Delphi7 而不是 Delphi 2010 来编译程序,它将运行得更快,因为 Delphi 2010 的单元比较重(警告:我没有比较过 Delphi 7 和 2010,也没有比较过 C++ 和 C,这只是我通过在线论坛阅读和语言之间的争论形成的印象)。你们可能会认为我有点疯狂,但我更喜欢一个程序(即使只是文本编辑器)完美无缺地运行,即使我的程序要在超级计算机上运行,我仍然喜欢尽可能地优化我的代码。也许我有强迫症?