控制台应用程序运行速度比GUI应用程序快

Oma*_*bal 16 c c++ delphi performance pascal

我对编程世界相对较新.我有一些性能问题:

  1. 控制台应用程序比具有图形用户界面的应用程序运行得更快

  2. 像C和Pascal这样的语言比C++和Delphi这样的面向对象语言更快吗?我知道语言速度更多地依赖于编译器而不是语言本身,但是程序语言的编译器是否比OO编译器(包括可以生成C代码的C++编译器)产生更快的代码?

Mic*_*yan 31

控制台应用程序的运行速度比基于Windows的应用程

简答:没有
答案:

在基于控制台的应用程序中,没有GUI线程需要重新绘制窗口并接受用户输入,因此从这个意义上讲,控制台应用程序可能会稍微快一点(因为它有一个较少的线程窃取CPU周期).但是,由于现代操作系统同时运行多个进程,无论如何,控制台应用程序仍然会与系统中的其他进程竞争CPU,所以没有.

c和pascal这样的语言比c ++和delphi这样的面向对象语言更快吗?

简答:没有
答案:

C和C++中的等效程序执行大致相同.虽然编程语言当然可以在性能中发挥作用,但通常您需要担心的主要是算法(您使用应用程序的逻辑表达的内容)而不是算法编码的语言.

  • AndréMassche:是的,支持对象需要一些开销.但是,如果这些对象产生更好的设计,整个应用程序可能会更快.例如,虚函数调用比重复测试if else if梯子要快得多. (7认同)
  • 快速而肮脏的评论:Delphi对象代码比Delphi程序代码慢一点,因为"自我"指针(必须存储在CPU寄存器或堆栈中)并且如果使用许多函数覆盖则会变慢.当您查看Delphi中生成的代码(CPU视图,CTRL-ALT-C)时,您可以看到这一点.C++有相同之处:如果你使用目标代码而不是程序代码(比如普通的C),由于对象继承等原因,它会有更多的开销.对于嵌入式软件,有时必须使用C,因为C++太慢了cq太多的开销 (2认同)
  • @Andre,在一个"等效程序"(例如一个可重入的程序)中,仍然需要传入指向包含与该调用有关的数据的结构的指针......它不会是自动的.例如,考虑一下pthread库中的调用...你仍然需要传入一个"pthread_t"对象,它只是显式的,所以我认为你的语句是不准确的.如果你使用共享状态,那么它就不再等价了(除非在OOP版本中你使用了静态函数,但是你不会有"this"指针). (2认同)

Car*_*icz 5

Michael Aaron Safyan已经给出了一个非常好的答案.我想简单介绍为什么面向对象的语言有时可以与较慢的代码相关联.

对我们程序员的现实要求一直迫使我们在更短的时间内编写更多代码.鉴于非常熟练的程序员,汇编语言将赢得每个速度记录,因为程序员准确地编码机器需要执行的操作,而其他很少.在实践中,大多数编程都不是在汇编程序中完成的,因为它非常繁琐且容易出错.编译语言使程序员的工作效率更高,因为他们让编译器处理大部分细节工作.

进一步向同一方向移动,Delphi使用自动字符串:无论何时使用它们都是"正确的"长度; 如果连接两个字符串,则会生成一个新字符串,它是前一个字符串组合的正确长度.如果更改该字符串并使其更长,则会创建一个新字符串,并自动丢弃前一个字符串.作为一名C程序员,你可以预料到程序会做什么,并为更大的字符串分配足够的空间,这样你就不必创建新的字符串并丢弃旧字符串.因此,字符串的内存管理对于以牺牲一些CPU时间为代价购买的程序员来说是一种便利.

同样,面向对象允许您将相关数据组视为同质数据块而不是字符串和数字.有时并不需要所有这些信息,而在低级C程序中,如果没有对象产生的某些操作和内存使用,您可能会这样做.这又是程序员对CPU速度的便利问题.

最后,一些接口被认为非常复杂,软件公司试图通过创建具有概念上更简单处理的面向对象框架来使它们变得平易近人.您可以创建一个窗口对象,通常只需要一些开销,而不是调用打开窗口.在一个奇怪的开发中,软件公司和个人开发人员经常构建更加面向对象的框架来隐藏或处理其他框架的复杂性.一些旧的项目最终会在原始功能的基础上使用多层面向对象的框架,并且不出所料,因为他们花了很多时间来管理自己,他们在咀嚼大量内存时表现出糟糕的性能.

总之,面向对象的代码有时与性能不佳有关,因为它的使用方式; 但特别是在C++的情况下,语言中没有任何东西可以"慢".